1.C++中struct和class的区别是什么?
答:C++需要兼容C语言,所以C++中struct可以当成结构体去使用。
另外C++中struct还可以用来定义类,和class是定义类是一样的。
区别是struct的成员默认访问方式是public,class是struct的成员默认访问方式 是private。
2.封装
面向对象的三大特性:封装、继承、多态。
在类和对象阶段,我们只研究类的封装特性,那什么是封装呢?
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。
3.一个类为空类对象占一个字节,若一个类中只有函数类对象也只占一个字节
4. 结构体内存对齐
1)第一个成员在与结构体偏移量为0的地址处。
2) 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS中默认的对齐数为8,gcc中的对齐数为4
3) 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4) 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,
结构体的整体大小就是 所有最大对齐数(含嵌套结构体的对齐数)的整数倍
设置默认对齐数:#prgma pack()
如何知道结构体a成员的偏移量 cout<<(((C*)0)->a)<<endl; 或者直接用内存对齐算
5.this指针
1) this指针的类型:类类型* const 地址不能改变内容可以改变 const int* a 地址可以改变内容不能变换
2)只能在“成员函数”的内部使用
3) this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,
将对象地址作为实参传递给this 形参。所以对象中不存储this指针。
4)this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户 传递
6.类中的六个默认成员函数
1)构造函数:完成初始化。默认构造函数 类名()+{}和全缺省参数函数(也是默认构造函数)一个类中只能存在一个。
2)析构函数:对象在销毁时自动调用完成清理工作。 ~+类名()+{}
3)拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),
在用已存在的类类型对象 创建新对象时由编译器自动调用
类名(const 类名+引用+变量)+{}
为什么形参要引用?
如果是值传递每次调用都会发生拷贝,拷贝继续调用拷贝构造函数这样九无穷无尽的调用拷贝构造函数
对 于引用来说不会发生拷贝,所以就不会调用拷贝构造函数
若未显示定义,系统生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷 贝,
这种拷贝我们叫做浅拷贝,或者值拷贝。
4)运算符重载
函数名字为:关键字operator后面接需要重载的运算符符号。
函数原型:返回值类型?operator操作符(参数列表)
赋值运算符重载有四点:a. 参数类型 b. 返回值 c. 检测是否自己给自己赋值 d. 返回*this
e. 一个类如果没有显式定义赋值运算符重载,编译器也会生成一个,完成对象按字节序的值拷贝。
Data d3=d1;是拷贝构造一个新对象d3 赋值运算符是两个变量要赋值必须先要存在
5)取地址
6)const取地址操作符重载
7.const成员
1) const对象可以调用非const成员函数吗? 不可以
2) 非const对象可以调用const成员函数吗? 可以
3) const成员函数内可以调用其它的非const成员函数吗? 不可以
4.)非const成员函数内可以调用其它的const成员函数吗? 可以
类和对象(中)笔记
最新推荐文章于 2022-06-18 12:12:17 发布