C++中的构造函数与析构函数
来源:互联网 发布:非凡软件站手机版 编辑:程序博客网 时间:2024/06/07 14:59
什么是构造函数与析构函数?
前面我们说过,在类的定义时,我们不能对成员数据进行初始化。但有时候,我们又需要对成员数据进行初始化,这时候构造函数就派上用场了。构造函数的功能就是在创建对象时,用给定的参数值对类里的数据进行初始化。析构函数会在类的对象的生命周期结束时自动调用,我们可以利用这一特点来做些内存释放的工作。
1.构造函数
构造函数会在对象建立时自动调用,我们一般将变量、对象的初始化代码放在构造函数里。
在C++里,构造函数必须与自己所在的类同名,它可以带参数,也可以不带参数,值得一提的是,尽管构造函数的名字是固定的,必须与与其所在类的名字相同,但构造函数却可以有多个。
示例:
class CMyClass { public: CMyClass(int x)//带参数的构造函数 { para1 = x; } private: int para1; };
构造函数既可以带参数,也可以不带参数,既可以带一个参数,也可以带不同的参数,还可以带不同的参数。如上所言,在同一个类里,可以有许多的构造参数。如下所示:
class CMyClass { public: CMyClass(int x)//带参数的构造函数 { para1 = x; } CMyClass(char *s1, char *s2)//带多个参数的构造函数 { str1 = s1; str2 = s2; } private: int para1; char *str1,*str2; };
特点:
(1).当构造函数重载时,应避免二义性
(2).构造函数没有也不需要指定返回值类型
(3).当类用于定义对象时,构造函数必须为共有型,只有这样类才能示例化,换句话说,只有这样,对象才能用这个类来定义。当这个类只用于派生其他类时,构造函数可定义为保护型成员函数。
1.2 默认构造函数
如果你自己并没有定义构造函数,那么编译会自动隐式生成一个不带参数的默认构造函数,其意义在于满足语法需要,因为我们在生成对象时,通常如下:
CMyClass myClass;//生成对象
只有在类中包含一个
CMyClass() { }
方能合法。
在我们自己创造了构造函数之后,默认的构造函数不再存在,
CMyClass myClass;//生成对象
会因为找不到默认的构造函数而出现编译错误,这时需要我们人为地添加一个不带任何参数的构造函数,即显式的默认构造函数,只有这样,上述语句才 不会造成编译错误。
2.析构函数
构造函数有且仅有一个,如果我们不人为添加,则编译会自动生成一个隐式的默认析构函数。
析构函数是在类名称前加一个”~“逻辑非的符号。示例:
class CMyClass { //....... public: ~ CMyClass()//析构函数 { } //........ };
特点:
(1)没有任何参数,不返回任何值。
(2)在类的对象调用结束时,析构函数会被自动调用。
根据第二个特点,我们在析构函数的结构体里添加delete函数来释放对象,从而达到清理内存的效果。
- 关于Object-c 中的构造函数与析构函数
- c++-构造函数与析构函数
- C++--构造函数与析构函数
- 【c++】构造函数与析构函数
- C++:构造函数与析构函数
- 【C++】初始化与清除(构造函数与析构函数)
- 派生类中的构造函数与析构函数
- c++中的构造函数与析构函数
- c++继承中的构造函数与析构函数
- C++多态中的构造函数与析构函数
- C++中的构造函数与析构函数
- C++构造函数与析构函数中的“异常”
- C++ 中的构造函数与析构函数顺序
- 浅谈C++中的构造函数与析构函数
- [C++]构造函数与析构函数讲解
- 构造函数与析构函数(C++)
- C语言的构造函数与析构函数
- C++_构造函数与析构函数
- strtoc函数原码剖析
- QGC的MainWindow
- python爬虫学习第二十六天
- phpstudy本地搭建域名访问
- 北京房价影响因素
- C++中的构造函数与析构函数
- List集合ListIterator和Iterator迭代器区别与用法
- Zephyr OS 内核篇:系统启动
- V8系统部署
- Ubuntu14.04+cuda8.06+cudnn5.1+gtx1070的GPU环境配置中遇到的错误修改参考
- hdu 1256 "8" 格式题
- 51nod 1433 0和5
- 【Python3.6爬虫学习记录】(十一)使用代理IP及用多线程测试IP可用性--刷访问量
- 2017ccpc网络预选赛1005