[c++]构造函数和析构函数
来源:互联网 发布:js计算对象长度 编辑:程序博客网 时间:2024/04/28 00:07
构造函数:
1 函数名=类名
2 无返回值(可以没有参数)
3 当用类声明对象时,系统自动调用
4 如果没有构造函数,系统会自动给一个默认的
5 他的功能是给私有成员赋初值
6 可以重载
7 缺省参数的构造函数
8 如果私有成员为数组,则必须用赋值语句(strcpy, for)
析构函数:
1 ~(函数名=类名)
2 无返回值,无参数
3 当程序结束,系统会自动调用析构函数释放对象(碰到 “}” 时进行析构)
4 如果没有构造函数,系统会自动给一个默认的
5 不能重载
6 只要在类里用new分配了空间,一定要在析构函数里用delete释放内存
#include<iostream>#include<string.h>using namespace std;class String_date{private: char *str;public: String_date(char* s) { cout<<"constructing:为字符串分配内存"; cout<<endl; str = new char[strlen(s) + 1]; strcpy(str,s); } ~String_date(void) { delete []str; cout<<"destructing:释放字符串占用空间"; cout<<endl; } char *get_info(void) {return str;}};int main(void){ String_date str1("teacher"); //String_date str2("qq"); String_date str2 = str1;//内存泄漏 cout<<str1.get_info()<<endl; return 0;}
拷贝构造函数
1 是构造函数
2 参数是同类对象的引用
3 直接调用引用对象的私有成
3 用一个已有的对象给同类对象赋初值
Point A = B 赋值初始化
Point A(B) 带入初始化
4 形参是类的对象,实参给形参拷贝要调用拷贝构造函数
5 返回值的类型是类当return时会产生一个无名参数此时调用拷贝构造函数
例一:
#include<iostream>using namespace std;class A{ int x;public: void Print() { cout<<"A:"<<x<<endl; } A(int x1) { x = x1; cout<<"structing:"<<x<<endl; }//构造 A(const A &A1) { x = A1.x; cout<<"copy structing:"<<x<<endl; }//拷贝构造 ~A() { cout<<"destructing:"<<x<<endl; }//析构}; void fun1(A A1)//形参为类的对象 { A1.Print();//对应A:1 } A fun2() { A A2(6); return A2; }int main(){ A B1(1); A B2(2); fun1(B1); return 0;}
例二:
#include<iostream>using namespace std;class A{ int x;public: void Print() { cout<<"A:"<<x<<endl; } A(int x1) { x = x1; cout<<"structing:"<<x<<endl; }//构造 A(const A &A1) { x = A1.x; cout<<"copy structing:"<<x<<endl; }//拷贝构造 ~A() { cout<<"destructing:"<<x<<endl; }//析构}; void fun1(A A1) { A1.Print(); } A fun2() { A A2(6);//注意这是调用拷贝构造函数时,2已经被改为6所以析构的时候成了6 return A2; }int main(){ A B1(1); A B2(2); B2 = fun2();//析构一个无名参数 return 0;}
例一结果:
例二结果:
0 0
- 构造函数和析构函数【c++】
- [c++]构造函数和析构函数
- 【C#】构造函数和析构函数
- 【C++】构造函数和析构函数
- 【C++】构造函数和析构函数
- C++:构造函数和析构函数
- <C++>析构函数、虚析构函数和构造函数
- 【C/C++】构造函数和析构函数
- C/C++——构造函数和析构函数
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- C++_构造函数和析构函数
- C#の构造函数和析构函数
- C++_构造函数和析构函数
- 学习C++——构造函数和析构函数
- [c++]派生类的构造函数和析构函数
- C#—构造函数和析构函数
- c++_6 : 构造函数和析构函数
- C#OOP之六 构造函数和析构函数
- 互斥锁使用(生产者和消费者)
- 利用Java的反射来访问private类
- 第三周项目一:三角形类1
- 2014134026武雪芹
- 九度OJ-1005 Graduate Admission
- [c++]构造函数和析构函数
- 剑指offer(2) - 二维数组中的查找
- return 返回值
- 好久没来写了
- jquery mobile入门【page】
- 【C#/OpenGL】CSGL中2D纹理加载PNG等透明图片显示的黑边问题
- 栈和链栈的实现
- BZOJ 3209 花神的数论题 (数位DP)
- hdu 1533 Going Home 最小费用最大流 入门题