关于C++默认构造函数的定义和调用

来源:互联网 发布:大淘客到底是什么软件 编辑:程序博客网 时间:2024/05/29 05:53

主要介绍通过堆栈两种方式调用构造函数,什么情况下调用默认构造函数会造成错误

声明栈对象时调用默认构造,成员对象值是不确定的,默认构造函数不会对成员进行处理,输出成员结果是不确定的:

示例:

#include <iostream>using namespace std;class test{private :int mOne;double mTwo;public :void getOne(){cout<<"one: "<<this->mOne<<endl;}void getTwo(){cout<<"two: "<<this->mTwo<<endl;}};int main(){    test one;one.getOne();one.getTwo();return 0;}
运行结果:


定义一个不带参数的默认构造函数:

代码:

#include <iostream>using namespace std;class test{private :int mOne;double mTwo;public :    test(){ this->mOne=0; this->mTwo=0.0;}void getOne(){cout<<"one: "<<this->mOne<<endl;}void getTwo(){cout<<"two: "<<this->mTwo<<endl;}};int main(){    test one;one.getOne();one.getTwo();return 0;}
运行结果:


声明带参数的构造函数,但创建对象时没有传递参数,此时不能通过正常编译,原因是编译器不能再生成默认构造函数

代码:

#include <iostream>using namespace std;class test{private :int mOne;double mTwo;public :    test(int mOne,double mTwo){ this->mOne=mOne; this->mTwo=mTwo;}void getOne(){cout<<"one: "<<this->mOne<<endl;}void getTwo(){cout<<"two: "<<this->mTwo<<endl;}};int main(){    test one;one.getOne();one.getTwo();return 0;}



在堆上创建构造函数,及其使用:

代码:

#include <iostream>using namespace std;class test{private :int mOne;double mTwo;public :    test(int mOne,double mTwo){ this->mOne=mOne; this->mTwo=mTwo;}void getOne(){cout<<"one: "<<this->mOne<<endl;}void getTwo(){cout<<"two: "<<this->mTwo<<endl;}};int main(){    test *one = new test(1,2);one->getOne();one->getTwo();delete one;return 0;}

运行结果: