1.struct和class
与C语言不同的是,C++中struct和class可以定义成员变量和成员函数。更偏好用class。
2.类的定义
格式如下:
class 为 定义类的 关键字, ClassName 为类的名字, {} 中为类的主体,注意 类定义结束时后面 分 号不能省略 。
class className
{
// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号
3.类的访问限定符
public、protected、private
【访问限定符说明】
1. public 修饰的成员在类外可以直接被访问
2. protected 和 private 修饰的成员在类外不能直接被访问 ( 此处 protected 和 private 是类似的 )
3. 访问权限 作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4. 如果后面没有访问限定符,作用域就到 } 即类结束。
5. class 的默认访问权限为 private , struct 为 public( 因为 struct 要兼容 C)
问题: C++ 中 struct 和 class 的区别是什么?
解答: C++ 需要兼容 C 语言,所以 C++ 中 struct 可以当成结构体使用。另外 C++ 中 struct 还可以用来
定义类。和 class 定义类是一样的,区别是 struct 定义的类默认访问权限是 public , class 定义的类
默认访问权限是 private 。注意:在继承和模板参数列表位置, struct 和 class 也有区别,后序给大
家介绍。
面向对象的三大特性:封装、继承、多态
封装本质上是一种管理,隐藏对象的属性和现实细节,仅对外公开接口来与对象进行交互。
4.类的作用域
类定义的新作用域简称类作用域。在类外定义成员时,需要使用::操作符指明对象所属的类操作域。
class Person
{
public:void PrintPersonInfo();
private:char _name[20];char _gender[3];int _age;
};
// 这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{cout << _name << " "<< _gender << " " << _age << endl;
}
5.类的实例化
注意:类本身并没有分配实际的内存空间,实例化后才占用实际的物理空间。
一个类可以实例化多个对象。
6.类对象模型
一个类的大小,实际上只计算该类中成员变量。注意计算时运用内存对齐。
内存对齐规则:
1. 第一个成员在与结构体偏移量为 0 的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS 中默认的对齐数为 8
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
为什么要内存对齐?为了提高效率。
编译器一次性一般读取4或8字节,从整数倍开始读。如果不内存对齐,一个数据就要读取两次,效率较低。