C++ - 类和对象

类和对象的概念:

  1. **什么是类:**类是现实世界当中不存在的,是一个模版,是一个概念,是人类大脑思考抽象的结果,类代表了一类事物,在现实世界当中,对象A与对象B之间有具体共同特征,进行抽象总结出来的一个模版,这个模版就被称为类。
  2. **什么是对象:**对象是实际存在的个体,现实世界当中实际存在,对象又被称为实例/instance。
  3. 类—-【实例化】—->对象、对象—-【抽象化】—>类。
  4. 类描述的是对象的共同特征,如:身高特征、体重特征等,这个身高特征在访问的时候,必须先创建对象,通过对象去访问这个特征。
  5. 一个类主要描述特征和动作,特征信息包括名字、身高、性别、年龄等,动作信息包括吃、唱歌、跳舞、学习

实例化对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Student
{
public:
//属性
string name;
//方法
void say(void)
{
cout << "我叫" << name << endl;
}
};
Student Demo; //实例化对象
int main(void)
{
//类的属性和方法的访问
QianRuShi.name = "嵌入式";
QianRuShi.say();
return 0;
}

方法的类外实现:

  1. 为了避免 class 的定义代码冗长问题, class 提供了方法的类外实现:
    • 首先必须在类内对方法进行声明

    • 在类外对方法进行定义,但是要对此方法进行类的标注

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Student
{
public:
//属性
string name;
//方法
void say(void); //类内声明
};
//类外实现
void Student::say(void)
{
cout << "我叫" << name << endl;
}
Student QianRuShi; //实例化对象
int main(void)
{
QianRuShi.name = "嵌入式";
QianRuShi.say();
return 0;
}

构造函数:

  1. 在 C++中, 在类中有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用) ,而是在实例化对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。
  2. 构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用
  3. 构造函数语法:类名(){}
    1. 构造函数,没有返回值也不写void
    2. 函数名称和类名相同
    3. 构造函数可以有参数,因此可以发生重载
    4. 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次
    5. 不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许
    6. 函数体中不能有 return 语句
    7. 构造函数必须是 public 属性的,否则实例化对象时无法调用。(也可以设置为 private、protected 属性,但是没有意义)
  4. 构造函数的重载:
    1. 和普通成员函数一样,构造函数是允许重载的。一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。

析构函数:

  1. 析构函数(Destructor)也是一种特殊的成员函数, 没有返回值,不需要程序员显式调用(程序员也没法显式调用) ,而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个~符号。
  2. 注意: 析构函数没有参数,不能被重载,因此一个类只能有一个析构函数。如果用户没有定义,编译器会自动生成一个默认的析构函数。
  3. 析构函数语法:~类名(){}
    1. 析构函数,没有返回值也不写void
    2. 函数名称和类名相同,在名称前加上符号~
    3. 析构函数不可以有参数,因此不可以发生重载
    4. 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次

动态内存:

  1. 在 C 语言中,动态分配内存用 malloc() 函数,释放内存用 free()函数。

  2. 在 C++中,这两个函数仍然可以使用,但是 C++又新增了两个关键字, new 和 delete: new 用来动态分配内存, delete 用来释放内存。

    1
    2
    int *p = new int; //分配 1 个 int 型的内存空间
    delete p; //释放内存
  3. 在 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
    24
    class 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 :

  1. C++通过 public、 protected、 private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符

    访问权限

访问权限1

参考链接: