(C++程序设计笔记)析构函数&复制构造函数


知识回顾

一、对象数组的创建及成员的访问

Student stu[2];
stu[].display();
Student *p = new Student[2];
delete[] p;
p->display();

类成员的访问权限

  • private:private修饰的成员只能在本类中访问,一般用于修饰数据成员;
  • public: public 修饰的成员在任何地方都可以被访问,一般用于修饰函数;
  • protected: protected 修饰的成员可以在本类和子类中被访问;

三、标识符的作用域与可见性

作用域

  • 块作用域: {}中起作用
  • 函数原型作用域:作用范围是最小的
  • 类作用域: class 类名 {} 中起作用
  • 命名空间作用域: namespace 命名空间{}

可见性:

在一个具有包含关系的作用域中,外层定义了一个变量,在内层定义了一个同名的变量,在内层的话外层的变量不可见,就近原则。

四、构造函数(非常重要)

  • 构造函数的作用:初始化对象的数据成员
  • 构造函数的特点:函数名与类名同名没有返回值无返回值类型.

定义的格式:

类名(参数列表){
    函数体
}

定义构造函数的注意事项:

  • 构造函数要定义为公有(public)的
  • 构造函数实在创建对象的时候自动调用的
  • 在同一个类中可以定义多个构造函数,构成函数重载;
  • 在定义一个类的时候,如果我们自己没有定义任何构造函数,那么系统会生成一个默认的构造函数,这个构造函数是无参的;一旦我们自己在类中定义了构造函数,那么默认的构造函数就失效了,如果还需要使用无参构造函数,那么自己定义。

作业讲解

新知识讲解

一、析构函数

  • 析构函数是一种特殊的成员函数
  • 构造函数是在创建对象的时候调用的,析构函数实在销毁对象的时候调用的
  • 析构函数的特点:
    • 析构函数的函数名与类名同名;
    • 析构函数没有参数
    • 析构函数没有返回值,也没有返回值类型。
    • 定义析构函数的时候,需要在函数名钱加~号
    • 每个类中有且只有一个析构函数
    • 析构函数在销毁对象的时候自动调用
  • 定义析构函数:
~Date(){
    函数体
}

在类外定义析构函数:

Date::~Date(){
    cout<<"析构函数"<<endl;
}
  • 析构函数使用的场景
  • 对于不是通过new关键字创建的对象,则在该对象生命期结束的时候,自动调用析构函数。
  • 如果是通过new关键字创建的对象,会在delete之后析构函数。

二、复制构造函数

  • 复制构造函数也叫拷贝构造函数;
  • 复制构造函数的作用: 将一个已经存在的对象去初始化另一个正在创建的对象;
  • 复制构造函数是一种特殊的构造函数。
  • 复制构造函数是参数是本类的引用。
  • 在类中,如果我们没有自己定义的拷贝函数,那么系统会自动生成一个默认的拷贝构造函数。 定义复制构造函数:
类名(类名 &引用名){
    函数体
}

复制构造函数的使用场景:

  • 1、使用一个已经存在的对象去初始化另一个正在创建的对象。
  • 2、将对象作为参数传递给函数;
  • 3、函数返回值是一个对象:

三、对象在内存中的存在形式

  • 对象是通过属性与行为去描述,属性与变量对应,行为与方法对应
  • 对象的数据成员都是独立的,但是所有对象共享成员函数。

四、静态成员

  • 静态数据成员
    • 想要一个类的多个对象共享一个数据成员,在C++中提供了一个静态成员变量来解决。
    • 静态成员变量实在所有对象中共享
    • 定义静态数据成员的基本语法:
    static 数据类型 变量名
    
    • 静态数据成员不能再内中初始化
    • 静态数据成员的生命周期从程序开始到程序结束

五、变量和对象的生存期和作用域

六、Const成员

作业:140 选择1-8 填空1-6 程序填空3、4、5、6 程序分析题1


分类:C++
标签: C++ 课堂笔记
文章目录