构造函数和析构函数

构造函数的特性:
1.名字和类名相同。
2.需要声明为 public 属性。否则创建对象时无法被调用。
3.没有返回值。函数体中不能有 return 语句,不管是声明还是定义函数名前都不能出现返回值类型,即使是 void 也不允许。
4.系统在创建对象时自动调用,不需要用户显式调用(用户也不能调用,会报错)。
5.允许重载。一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。
6.如果用户没有定义构造函数,编译器会自动生成一个函数体和形参都为空的构造函数。例:Student(){}。
7.调用没有参数的构造函数或不传参数,不能加括号!!!(不过在Visual Studio据说不会报错)

构造函数的作用:
在创建对象的时候对对象的数据成员进行初始化:
方式一:采用参数初始化表。
方式二:在构造函数的函数体中对成员变量赋值。
使用参数初始化表并没有效率上的优势,仅仅是书写方便,尤其是成员变量较多时,这种写法非常简明。

析构函数的特性:
1.名字:~类名。
2.需要声明为 public 属性,否则释放对象时无法被调用。
3.没有返回值。函数体中不能有 return 语句,不管是声明还是定义函数名前都不能出现返回值类型,即使是 void 也不允许。
4.系统在释放对象时自动调用,不需要用户显式调用(用户可以调用,但无需这样做,容易导致程序异常终止)。
5.不允许重载。因此一个类只能有一个析构函数。
6.如果用户没有定义析构函数,编译器会自动生成一个默认的析构函数。
7.析构函数没有参数。

析构函数的作用:
在系统释放对象占用的内存之前进行一些清理工作,把对象所占用的额外空间归还给程序。

复制代码
#include <iostream>

using namespace std;

class Student
{
public:
    // 方式一:采用参数初始化表
    Student(int a, int b) : age(a), score(b)
    {
        cout << "调用构造函数" << endl;
    }
    // 方式二:在构造函数的函数体中对成员变量赋值
    /* Student(int a, int b)
    {
        age = a;
        score = b;
        cout << "初始化完成" << endl;
    } */
    ~Student()
    {
        cout << "调用析构函数" << endl;
    }
    void printinfo()
    {
        cout << "age : " << age << endl;
        cout << "score : " << score << endl;
    }

private:
    int age;
    int score;
};

int main(int argc, char *argv[])
{
    Student stu(16, 18);
    stu.printinfo();
    return 1;
}
 
输出:
调用构造函数
age : 16
score : 18
调用析构函数
复制代码

 

posted @   jason8826  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示