C++的构造函数和析构函数
来源:互联网 发布:淘宝上的安踏官方网店 编辑:程序博客网 时间:2024/06/13 23:10
构造函数是什么,从构造这个词可以理解为在创建对象前必须得调用的函数,所以构造函数不是给对象调用的,而是拿来创建对象的,构造函数调用肯定先于对象被创建。而且构造函数是不能够被继承的,不管是public还是protected,private。这就意味着我们在写一个类时,我们得写构造函数,如果不写,系统自动默认什么有一个也没做的无参构造函数。如果我们写了构造函数,系统就不会默认构造函数,那么如果你没定义无参构造函数定义了有参构造函数却调用无参的构造函数去创建对象,那么编译会报错。
class Base {public:Base();Base(string);~Base();};Base::Base() {cout<<"Base::Base()"<<endl;}Base::Base(string str){cout<<"Base::Base(string)"<<str<<endl;}Base::~Base() {cout<<"Base::~Base()"<<endl;}int main(){Base a;Base b("hello world");return 0;}//打印Base::Base()Base::Base(string)hello worldBase::~Base()Base::~Base()
通过上面代码打印信息可以看出创建对象时构造函数会被调用,如果把Base的无参构造函数屏蔽,编译报错。所以总结:1.当你写一个类时没有定义构造函数,那么你创建对象系统就会自动调用一个什么也没做的无参构造函数。
2.当你写一个类时只定义了有参构造函数,那么你创建对象没有传参数,系统不会默认提供无参构造函数,编译会报错。
3.构造函数可以有很多个,创建对象时根据参数类型个数不同调用相应的构造函数,符合c++里的重载特性。
说完构造函数,析构函数其实跟构造函数类似,构造函数是构造对象,析构函数相反,是在对象被销毁时对手动分配的一些内存进行回收,关闭文件资源等,析构函数一般不手动去调用,在对象被销毁是系统会自动的去调用这个函数,如果在一个对象里在堆分配了空间,却没在析构函数里释放,就会容易导致内存泄露。
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的构造函数、析构函数和赋值函数。
- Queue(队列) Stack(堆栈)
- Android 监听apk安装替换卸载广播的实现代码
- iCheat 使用教程
- 简单的构造哈希函数
- hdoj 2122Ice_cream’s world III 【最小生成树 kruskal && prim】
- C++的构造函数和析构函数
- uva 1086 - The Ministers' Major Mess(2 SAT)
- angularJS的controller之间如何正确的通信
- 黑马程序员——C语言之指针数组和数组指针的区别
- Error:Cannot build Artifact 'art_training:war exploded' because it is included into a circular depen
- C语言
- 日历小案列
- 枚举类型
- javaweb相关