C++:对象和类|| 类的构造函数与析构函数

Posted 赵同学的代码时间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++:对象和类|| 类的构造函数与析构函数相关的知识,希望对你有一定的参考价值。

类在构造时,会默认调用类的构造函数;类在销毁时,又会默认调用类的析构函数,所以,这两函数无论是否预先定义,类在定义时都会自动执行,未定义时也会默认补足。巧妙使用构造函数与析构函数,可以实现类的初始化或其他特殊的功能。


析构函数与构造函数在内存分配上也具有重要的意义,如果构造函数使用new关键字申请了类空间,则在该类生命周期结束时,系统会自动调用析构函数使用delete释放空间,完成清理工作。


构造函数

声明和定义一个构造函数:

构造函数三无:无返回值,无类型,无自己的名字

Stock::Stock(const string & co, long n, double pr)由函数重载,可以多次定义Stock从而适应不同初始值的自动匹配

成员名和参数名

在构造函数中参数名不能与类成员名相同!

//No,该函数目的是为shares和share_val赋初值//由于构造函数可以直接访问数据这样操作会出问题Stock::Stock(const string& company, long shares, double share_val){    shares = shares??? //写到这里就会发现问题解决方法1:在定义时 修改数据前后缀Stock::Stock(const string& company, long shares, double share_val){    m_shares = shares;//前缀加m_    share_val_ = share_val; //后缀加_}解决方法2:修改形式参数名Stock::Stock(const string& company, long sh, double sh_val){    shares = sh;    share_val = sh_val;}


使用构造函数:


a.显式使用构造函数(构造函数返回相当于一个类)

Stock food = Stock(...)//food不存在,使用构造函数,可能无副本food = Stock(...)//food已经存在,赋初值,必有副本,若均可,往往第一种方法效率更高

b.隐式调用,直接加括号

Stock food(...)

对于a,部分编译器会直接当作b处理,也有部分编译器会创建一个副本,这使得会多产生一次构造与析构。

Stock *pstock = new Stock()...

d.构造函数不能被对象自身调用,因为没有构造函数就没有对象,对象不能自己构造自己


默认构造函数:

不带参数的构造函数,有构造函数就必须有默认构造函数,没有构造函数就可以没有默认构造函数,因为默认有了默认构造函数,这句话有些拗口,它的意思是,如果定义了含参的构造函数,则必须定义默认构造函数,否则会报错,这是想要避免创建未初始化的对象,确保类被定义时就有一个确定的已知值,未知的东西往往会带来想不到的后果。


为了省去麻烦,多打一行总是好的。


析构函数

析构函数同样满足三无:无返回值,无类型,无自己的名字

析构函数的命名是在类名前加上一个 非 符号~;

~Stock();Stock::~Stock(){    cout << "bye" << name << endl;}加上上面一句输出后运行,你会看见,每当一个类生命周期结束内存被释放时,它会给你说一句拜拜

注意,不同编译器对于析构函数的执行可能会有不同处理。


const:

这里的const是一种新语法,保证函数不会修改调用对象

倘若有例子:

const Stock land = Stock(...);land.show();//deny 程序将拒绝执行第二行,因为没有机制保证show()函数不会修改land

倘若在show函数声明时:多加一个关键字const,就像程序保证不会修改调用对象C++就会继续执行第二条语句了。

void show() const;对应函数定义的开头:void Stock::show() const{}


小结:

构造函数与析构函数是一类特殊的类成员函数,在创建和销毁对象时被调用。

构造函数与析构函数都是三无函数,区别在于~。

如果构造函数使用了new,那析构函数中应该体现delete。

以上是关于C++:对象和类|| 类的构造函数与析构函数的主要内容,如果未能解决你的问题,请参考以下文章

C++ 类的继承三(继承中的构造与析构)

C++ - 构造函数与析构函数的使用

[C++潜心修炼]类与对象:构造与析构与拷贝构造

对象的构造与析构

构造函数constructor 与析构函数destructor

(笔记):构造函数与析构函数