一、类
C++是一种面向对象的语言,它在C语言的基础上添加了一种新的数据结构,类 ——class
class是一种复合型的数据结构
它能够由不同类型的变量及函数组成
C++中的class与struct几乎没有区别
唯一的区别是class里的成员的默认属性是private(私有的) ,而struct里的成员默认属性是public (公共的)
class Person { char name[20]; int age; public: void show(void) { cout << "name:" <<name << " age: " << age <<endl; } };
二、类的构造函数
在创建类的实例时,会自动执行类的构造函数,构造函数没有返回值,且构造函数的名字要与类名一致,没有手动定义构造函数时,编译器会自动定义一个无参的构造函数,通常会程序员会定义类的构造函数来进行初始化、分配资源、设置对象的初始状态。使用new申请内存时,会自动调用构造函数。
构造函数能够被重载,同时,构造函数的参数能够有默认值,调用的构造函数不存在时可能会造成编译错误
class Student { int id; int age ; char sex; public : Student(void) { id =0; } Student(int _age) { age = _age; } Student(char sex,int id = 0) { } };
三、类的析构函数
当对象被销毁时会自动调用它的析构函数,对象的整个生命周期中只能被调用一次,它是对象被销毁前的最后执行的动作。析构函数不能被重载,没有返回值,没有参数。如果没有定义析构函数编译器会默认产生一个析构函数,使用delete释放内存时会自动调用析构 函数。
析构函数的定义
~类名(void)
{
}
class Student { int id; int age ; char sex; public : ~Student(void) { } };
四、初始化列表
写在构造函数后,是一种成员的初始化方式,通常用来初始化 const 属性的成员
语法如下
类名(参数...):成员1(参数1),成员2(参数2)
{
}
【例】:
class Student { const int id; int age ; const char sex; public : ~Student(int age,int _id,char _sex):id(_id),sex(_sex) { this->age = age } };
五、this指针
相同类的对象各自拥有独立的成员实例,但彼此共享一份成员函数(成员函数只有一份)
当一个对象调用了一个它的成员函数(非静态static的)时,编译器会自动为该函数传递一个指向该对象的指针this,成员函数由此能够知道被哪个对象调用了
类中的所有成员函数都有this指针,包括构造、析构、拷贝构造等。
只是构造中this指向的是正在被创建的对象。
如果成员函数是属性是静态(static)的,那么该函数就属于这一个类,可以通过 类名::函数名(参数) 调用,因此静态成员函数没有this指针,无法通过this来访问成员实例。