提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、面向对象高级编程
基于对象Objext Based和面向对象Object Oriented
1.基于对象主要是单一的class的设计,通常里面只有复数,就是不包含指针的
2.面向对象比如说多重class设计,如string类,包含指针,指针指向数组的首内存空间
代码文件
1.头文件:头文件防卫式声明,它可以防止头文件被多次包含
#ifndef _COMPLEX_
#define _COMPLEX_
#endif
2.cpp文件
3…hpp文件
注意系统安装的头文件用#include<>,而自己写的头文件要#include"complex"
4.class类里面inline函数,速度会快很多,一些简单的成员函数{}里面,编译器如果有能力的话,会弄成inline,这样编译速度会快很多
5.写构造函数的时候是可以重载,但出现以下情况编译器会报错,有默认参数的存在时候回有可能编译器不知道重载
class Person{
Person()re(0),ne(0){}
Person(double r=0,double n=0):re(r),ne(n){
}
};
//当调用时
{
Person P1;
Person P2():
}
二、一个class的自我修养
1.数据都放在private
思考:如果把类的构造函数放在private会怎么样?
好处:经典设计模式为Singleton(单例),它在类里面就已经创建了一个对象,外界想要调用这个类需要经过一个特殊函数。
2.构造函数用initialization list用来初始化(初始化列表)
常见有两种
1.常规
class complex{
public:
complex(double r=0,double= i=0):re(r),im(i){}
private:
double re,im;
};
2.子类中的构造函数
class Base {
private:
int x;
int y;
public:
Base(int x, int y) {
this->x = x;
this->y = y;
}
int getX() {
return x;
}
int getY() {
return y;
}
};
class Sub : public Base {
private:
int z;
public:
Sub(int x, int y, int z) :Base(x,y),z(z) {
//这里的是子类的构造函数,此时他调用父类的构造函数对父类进行赋值
}
int getZ() {
return z;
}
int calculate() {
return Base::getX() * Base::getY() * this->getZ();
}
};
3.常量成员函数(也就是成员函数括号右边加const)
常量成员函数通常对于那些只拿类对象里面的数据,而不做修改才会用。
对class里面数据操作的分成不会改变数据内容和会改变数据内容的
对不会改变数据内容的马上加const
在上面例子中,如果类外创建对象调用时使用const complex c1(2,1)
,而类内成员函数声明时候并不包含const
,由于类外存在const
就是说传进去的参数是不会改变的,但是如果有需要在类内是改变这个参数,那么此时就会出错。
4.传入参数的时候用引用传入pass by reference(to const)
1.引用底层就是一个指针,占用四个字节。如果使用值传递,传递进去的参数可能占上百字节,此时影响效率,如果此时用引用方式传递,速度比较快
2.假设穿进去的是字符型,只占一个字节,确实可以使用值传递,上面说的只是一种规范
3.使用const
前提是,不需要改变里面的数据,只需要从类里面拿出来
5.返回参数的时候也用应用返回。return by reference(to const)
思考:什么时候可以使用引用作为返回值?
回答:当返回的参数是类外已经存在的内存空间时,可以用引用作为返回。相反,如果返回值本身只是在类内创建的,那么当这个函数结束时,局部变量会被自动释放,此时如果用引用作为返回只能返回那个地址,但是里面的内存是被释放了。
上面例子中,是把传进来的类1+类2赋值给类1,就会最后返回的是类1,这时候可以用引用。如果此时函数中创建一个类3,把1和2 相加的值赋值给类3,然后返回类3就会出错,函数调用完后类3就会立刻释放。
友元来打破封装(相同class的各个对象互为友元)
优点:通过友元来获取数据会比在类里面通过函数拿到私有数据要快
相同class的各个对象互为友元
通过类作为参数传递,表面上看破坏了封装性,其实本质上各个对象都是互为友元的。
总结
主要介绍泛型编程里面,类内的规范,主要分成1.私有数据2.传入传出参数用引用3.构造函数初始化列表4.成员函数()后加const5.友元破坏封装性。