C++的构造函数和析构函数
来源:互联网 发布:能微信提现的赚钱软件 编辑:程序博客网 时间:2024/06/05 03:18
class A{public:A(){}//构造函数
~A(){};//析构函数};
构造函数
创建类的实例的时候,会自动调用构造函数。
如果没有自己实现构造函数,则系统会自动生成一个默认的构造函数。如果已经实现了,那么默认的构造函数会失效。
构造函数可以重载。
函数名和类名一致。
函数没有返回值。
析构函数
类生命周期结束后,用来清理类里的资源的函数。
如果没有显式地去定义的话,编译器会自动生成一个,不做任何事。
如果显式定义,则编译器不会自动生成。
析构函数以~开头,函数的名字和类名一致,没有参数。没有返回值。
拷贝构造函数
当发生类的实例之间赋值时,会出现两个类之间的成员拷贝。
这种拷贝在某些情况下是没问题的,但是如果成员变量是指针,且在构造函数里动态分配内存,在析构函数里释放,就会出问题。
#include <iostream>#include <cstring>using namespace std;class Automate{ private: double p; char *name; public: //只读成员变量只能用初始化列表的方式初始化 Automate(double _p):p(_p),//将price变量初始化为_price { name=new char[20]; } void show(void) { cout<<p<<endl; } //析构函数 ~Automate(void) { if(name) { delete name; name=NULL; } cout<<"类在此被析构"<<endl; } //自己的拷贝构造函数 Automate(const Automate &automate) { name=new char[20]; //自己申请自己的空间 strcpy(name,automate.name); p=automate.p; }};int main(void){ Automate automate(2.5);//第一个实例 Automate automat2=automate; //让第二个实例等于第一个实例 //发生了类之间的拷贝,也就是等价于下面: /* automat2.price=automate.price; automat2.name=automate.name; automat2.balance=automate.balance; */ automat2.show(); Automate automate3(automat2); automate3.show(); Automate *p=new Automate(automate3); p->show(); }
0 0
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- 构造函数和析构函数【c++】
- [c++]构造函数和析构函数
- 【C#】构造函数和析构函数
- 【C++】构造函数和析构函数
- 【C++】构造函数和析构函数
- C++:构造函数和析构函数
- [c++]派生类的构造函数和析构函数
- C++:类的构造函数和析构函数
- c++---派生类的构造函数和析构函数
- <C++>析构函数、虚析构函数和构造函数
- 【C/C++】实现一个string类的构造函数、析构函数和赋值函数
- 【C/C++】构造函数和析构函数
- C/C++——构造函数和析构函数
- string类的构造函数,析构函数,拷贝构造函数和赋值构造函数
- 如何用c语言实现CString的构造函数、析构函数和赋值函数?
- C/C++学习笔记:String类的构造函数、析构函数和赋值函数
- C/C++面试题:编写类String的构造函数、析构函数和赋值函数。
- C#笔记整理(八)
- Linux 安装Tomcat
- 小白记录~JSP和JavaBean+Servlet模型图(MVC)图解
- Imageloader属性大全
- 前置申明的应用及其问题.
- C++的构造函数和析构函数
- Nginx+IIS+Redis 处理Session共享问题 1
- 371. Sum of Two Integers
- ACM程序设计书中题目--V(对书按照特定方式排序)
- The Dominant Color (20)
- 【MyBatis学习08】动态SQL
- 某种序列
- 剖析fail-fast机制和ConcurrentModificationException
- 大数据工程师(开发)面试系列(6)