构造函数constructor 与析构函数destructor(一)
2024-10-21 03:19:27
构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数。
(1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行。
(2)通常情况下构造函数应声明为公有函数,否则它不能像其他成员函数那样被显式地调用 构造函数被声明为私有有特殊的用途,这个以后再写。
(3)但是可以有参数,因为有参数,故可以被重载。
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i=);
Test(int i,char c);//构造函数被重载
void fun();
void fun(int i=);//普通函数被重载,不过这种重载会有问题,当在函数中以fun()这种形式调用fun函数时,连接器就不知道链接哪一个具体的fun了。 };
#endif //TEST_H
(4)不带参数的构造函数 或者所有的参数都有默认值的构造函数,成为默认构造函数,默认构造函数只能有一个,如果默认构造函数既包含不带参数的,也包含所有参数都有默认值的,那么编译器就会报错。
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i=);
Test();//类中有两个默认构造函数 };
#endif //TEST_H
(5)如果程序中未声明任何构造函数,则系统自动产生出一个默认构造函数,但是只要程序员自己生命了一个构造函数,编译器就不会再生产默认构造函数。
(6)构造函数和delete:可以在堆中用new operator 分配一个对象的空间,这种分配的对象空间要由程序员自己释放,用delete,在new时调用constructor 在delete时调用destructor。
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i = ){};
Test(int i, char c){}; };
#endif //TEST_H int main(){ Test* tp = new Test();//调用constructor
delete tp;//调用destructor
return ;
}
(7)一般的局部类对象的初始化顺序,即构造函数被调用的顺序,一般语气定义的顺序一样,释放的顺序,即析构函数被调用的顺序,一般与构造函数调用的顺序相反。
(8)全局对象的构造函数在主函数main之前被调用,在main函数结束时,析构函数被调用
(9)构造函数和数组
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i = ){}
Test(int i, char c){}
~Test(){} };
#endif //TEST_H int main(){ Test* tp=Test[];//创建一个Test对象的数组,被tp指针指向。
delete [] tp;//删除指向数组的指针,一定要加[]。
return ;
}
析构函数的定义:析构函数是c++中的类对象生存期结束时,被调用用来释放对象空间的特殊函数,也是自动调用的。
(1)析构函数的名字在类名前加一个~符号
(2)析构函数不能有返回值,也不能有参数,因此不可以重载
(3)析构函数可以被显示的调用,构造函数不行
#ifndef TEST_H
#define TEST_H
class Test{
int m_i;
public:
Test(int i = ){}
Test(int i, char c){}
~Test(){} };
#endif //TEST_H int main(){ Test* tp = new Test();
tp->~Test();//显示调用析构函数
delete tp;
return ;
}
最新文章
- ios .a和.framework
- Azure SQL Database (20) 使用SQL Server 2016 Upgrade Advisor
- linux epoll模型使用注意点
- div+css进度条
- uniq,sort,
- [资源] Resources on Self-Driving Car
- mysql mmm高可用架构设计
- HDU4607 - Park Visit(树的直径)
- ECP系统J2EE架构开发平台
- (1)常见O(n^2)排序算法解析
- 前端技术之_CSS详解第一天
- mysql进阶(六)模糊查询的四种用法介绍
- 从jsp到java文件再返回到前台页面的过程
- LoRa---她的芯片和她的几种工作模式
- 编译EXE文件的时候pcap编译不进去。 pyinstaller pcap pypcap 报错
- 解决JS中missing ( before function parameters的错误
- Delphi for iOS开发指南(4):在iOS应用程序中使用不同风格的Button组件
- 第一章:了解SQL_数据库基础
- fiddler对安卓APP进行抓包
- logger类