类和对象的概念:
- **什么是类:**类是现实世界当中不存在的,是一个模版,是一个概念,是人类大脑思考抽象的结果,类代表了一类事物,在现实世界当中,对象A与对象B之间有具体共同特征,进行抽象总结出来的一个模版,这个模版就被称为类。
 - **什么是对象:**对象是实际存在的个体,现实世界当中实际存在,对象又被称为实例/instance。
 - 类—-【实例化】—->对象、对象—-【抽象化】—>类。
 - 类描述的是对象的共同特征,如:身高特征、体重特征等,这个身高特征在访问的时候,必须先创建对象,通过对象去访问这个特征。
 - 一个类主要描述特征和动作,特征信息包括名字、身高、性别、年龄等,动作信息包括吃、唱歌、跳舞、学习
 
实例化对象:
1  | class Student  | 
方法的类外实现:
- 为了避免 class 的定义代码冗长问题, class 提供了方法的类外实现:
首先必须在类内对方法进行声明
在类外对方法进行定义,但是要对此方法进行类的标注
 
1  | class Student  | 
构造函数:
- 在 C++中, 在类中有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用) ,而是在实例化对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。
 - 构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用
 - 构造函数语法:类名(){}
- 构造函数,没有返回值也不写void
 - 函数名称和类名相同
 - 构造函数可以有参数,因此可以发生重载
 - 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次
 - 不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许
 - 函数体中不能有 return 语句
 - 构造函数必须是 public 属性的,否则实例化对象时无法调用。(也可以设置为 private、protected 属性,但是没有意义)
 
 - 构造函数的重载:
- 和普通成员函数一样,构造函数是允许重载的。一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。
 
 
析构函数:
- 析构函数(Destructor)也是一种特殊的成员函数, 没有返回值,不需要程序员显式调用(程序员也没法显式调用) ,而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个~符号。
 - 注意: 析构函数没有参数,不能被重载,因此一个类只能有一个析构函数。如果用户没有定义,编译器会自动生成一个默认的析构函数。
 - 析构函数语法:~类名(){}
- 析构函数,没有返回值也不写void
 - 函数名称和类名相同,在名称前加上符号~
 - 析构函数不可以有参数,因此不可以发生重载
 - 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次
 
 
动态内存:
在 C 语言中,动态分配内存用 malloc() 函数,释放内存用 free()函数。
在 C++中,这两个函数仍然可以使用,但是 C++又新增了两个关键字, new 和 delete: new 用来动态分配内存, delete 用来释放内存。
1
2int *p = new int; //分配 1 个 int 型的内存空间
delete p; //释放内存在 C++中,建议使用 new 和 delete 来管理内存,它们可以使用 C++的一些新特性,最明显的是可以自动调用构造函数和析构函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24class Student
{
public:
//属性
string name;
Student(void)//构造函数
{
cout << "Student void" << endl;
}
~Student()//析构函数
{
cout << "~Student" << endl;
}
};
void Student::say(void)
{
cout << "我叫" << name << endl;
}
int main(void)
{
Student *p = new Student();
delete p;
return 0;
}
public、 private 和 protected :
C++通过 public、 protected、 private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符

