[C++系列] 31. C++类与对象总结

 1)怎么去定义一个类?

class、struct均可行,只不过这两者所定义的默认访问权限不同,class默认为私有、struct默认为公有。

2)访问限定符有几种?分别作用是什么?

有三种:public、private、protected,由private、protected两个关键字修饰的成员在类外无法直接进行访问,仅能访问public所修饰的成员。这三个关键字所修饰限制的范围为当前A1关键字到下一A2关键字均受A1关键字所限制。

3)类的作用域

所有在类当中定义的成员,均属于当前类的作用域,类似于局部作用域,在全局域下是看不到在类当中所定义的成员的,只有通过类对象去调用才能够正常的使用。

4)类的实例化

需要理解两点:类是不占实际的空间的,只有用类真正实例化的对象才会真正占空间。所谓的实例化就是用类类型定义出变量,也称为对象。类的对象当中仅存放了成员变量,成员函数不存在对象当中,存在于公共的代码段。

5)this指针

其只存在成员函数当中,它是成员函数的第一个形参,而且这个形参不能显示的传,编译器会自动进行传递,如果显示的进行传递编译不通过,相当于自己传一个、编译器再帮你传一个,这时编译器即无法进行识别,会出错。但是可以在成员函数中显式的去使用this指针。this指针始终指向调用当前成员函数对象的地址,那个对象调用该成员函数,那么this指针就指向该对象。this指针一般存在栈上,通过优化的话一般通过ecx寄存器进行传递。

 1)构造函数:重载是一大特点,构造函数可以有多个,默认构造函数有三个,系统默认生成、全缺省、无参构造函数,这三个默认的只能存在一个。其它的构造函数可以有多个,支持重载。

2)析构函数:名字前加~,析构函数只能有一个,不能够重载。

3)拷贝构造函数:参数必须传引用。拷贝构造是生成一个新的对象。

4)赋值运算符重载:对已经存在的对象进行赋值,改变其内容。不是所有的''=''的地方都是拷贝构造,需要查看对象是否存在。若存在会调用赋值运算符重载,若不存在,会调用拷贝构造。

5)运算符重载:两种定义方式,定义为全局、定义为成员函数。定义为成员函数时,参数少一个,其第一个参数被this指针所占用。

6)深、浅拷贝:经常被问到。若不拷贝该对象的资源为浅拷贝,若拷贝对象的内容和资源,则为深拷贝。

7)const成员函数:const修饰成员函数当中的this指针,表示成员函数中对象内容不能改变。所以非const成员可以调用const成员函数,但是const成员只能够调用const成员函数。权限可以缩小,但不能够放大。可读可写的接口可以调用可读、可读可写的接口。但针对可读的接口,它仅能调用可读接口,不能够调用可读可写的接口。

 1)构造函数注意初始化列表

2)友元在实际上应用较少,在后期的关于线程安全及辅助工作大多都由内部类进行实现。

3)静态成员必须在内外进行初始化,其不属于某个对象,为所有对象所共有。

猜你喜欢

转载自blog.csdn.net/yl_puyu/article/details/88841419
今日推荐