C++的构造函数和析构函数
来源:互联网 发布:ff14大数据 编辑:程序博客网 时间:2024/06/14 08:24
(一)构造函数:(分为有参数和无参数两种)
a:定义:
1)C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数;
2)构造函数在定义时可以有参数;
3)没有任何返回类型的声明。
b:作用:完成对参数的初始化
构造函数建立例子:
class Test //定义一个类{public: Test() //无参数构造函数 { //完成对属性的初始化工作 a = 10; p = (char *)malloc(100); strcpy(p, "aaaaafff"); } Test(int m_a,int m_b) //有参数构造函数 { a = m_a+m_b; } //赋值构造函数(copy构造函数) Test2(const Test2& obj) { cout << "我也是构造函数" << endl; }private: int a; char *p;};
c: 调用方法(一般C++编译器会自动调用,也可人工调用):
1)无参数构造函数的调用
class Test2 //定义一个类{public: Test2() //定义一个无参数构造函数 { m_a = 0; m_b = 0; cout << "无参数构造函数" << endl; }public: void printT() { cout << m_a << endl; cout << m_b << endl; }private: int m_a; int m_b;};void main(){ Test2 t1; //调用无参数构造函数 t1.printT(); system("pause");}
2)有参数构造函数的三种调用方式
1,第一种调用方法
class Test2 //定义一个类{public: Test2(int a) //定义一个带一个参数的构造函数 { m_a = a; m_b = 0; }public: void printT() { cout << m_a << endl; cout << m_b << endl; }private: int m_a; int m_b;};void main(){ //Test2 t2 = 4; //这两个写法是一样的效果,都是对的 Test2 t2 = (3,4); //构造函数只有一个参数是会把这个当做一个逗号表达式,取最后一个数的值 t2.printT(); system("pause");}
2,第二种调用方法(较常用的)
class Test2 //定义一个类{public: Test2(int a,int b) { m_a = a; m_b = b; cout << "有参数构造函数" << endl; }public: void printT() { cout << m_a << endl; cout << m_b << endl; }private: int m_a; int m_b;};void main(){ Test2 t1(1,2); t1.printT(); system("pause");}
3,第三种调用方法(手动调用构造函数)
class Test2 //定义一个类{public: Test2(int a,int b) { m_a = a; m_b = b; cout << "有参数构造函数" << endl; }public: void printT() { cout << m_a << endl; cout << m_b << endl; }private: int m_a; int m_b;};void main(){ //直接调用有参构造函数完成t4的初始化(只调用了一次构造函数) Test2 t4 = Test2(1, 2); //手工调用了匿名对象 t4.printT(); //t1 = t4; //把t4 copy给t1 //赋值操作,与上面的不是一回事 //对象的初始化和对象的赋值是不同的概念 system("pause");}
d,构造函数的规则
1)当类中没有定义任何一个构造函数时,c++编译器会提供默认无参构造函数和默认拷贝构造函数
2)当类中定义了拷贝构造函数时,c++编译器不会提供无参数构造函数
3) 当类中定义了任意的非拷贝构造函数(即:当类中提供了有参构造函数或无参构造函数),c++编译器不会提供默认无参构造函数
4 )默认拷贝构造函数成员变量简单赋值
总结:只要你写了构造函数,那么你必须用。
(二)析构函数
a:析构函数定义及调用
1)C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数
语法:~ClassName()
2)析构函数没有参数也没有任何返回类型的声明
3)析构函数在对象销毁时自动被调用
4)析构函数调用机制
C++编译器自动调用
b:析构函数实例:
class Test{public: Test() //构造函数 { //完成对属性的初始化工作 a = 10; p = (char *)malloc(100); strcpy(p, "aaaaafff"); cout << "我是构造函数,被执行了" << endl; } void printP() { cout << p << endl; cout << a << endl; } ~Test() //析构函数 { if (p != NULL) { free(p); } cout << "我是析构函数,被调用了" << endl; }private: int a; char *p;};
构造析构总结
1)构造函数是C++中用于初始化对象状态的特殊函数
2)构造函数在对象创建时自动被调用
3)构造函数和普通成员函数都遵循重载规则
4)拷贝构造函数是对象正确初始化的重要保证
5)必要的时候,必须手工编写拷贝构造函数
- 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的构造函数、析构函数和赋值函数。
- Ubuntu下安装和配置RXTX实现串口通讯
- html中将某个控件限制在框内的方法
- Cookie详解
- Android学习之解决ListView中item点击事件和item中Button点击事件冲突问题
- 结构体字节对齐
- C++的构造函数和析构函数
- Android 一些文件的打开方式
- noip2006初赛-全排列
- mesos和yarn区别
- mysql的联合索引
- Android studio安装后无法打开问题
- 教你搞定IOS远程消息推送APNS
- [leetcode-173]Binary Search Tree Iterator(java)
- 黑马程序员--Java基础学习(网络编程)第二十四天