主要介绍通过堆栈两种方式调用构造函数,什么情况下调用默认构造函数会造成错误
声明栈对象时调用默认构造,成员对象值是不确定的,默认构造函数不会对成员进行处理,输出成员结果是不确定的:
示例:
#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;
}
运行结果: