主要介绍通过堆栈两种方式调用构造函数,什么情况下调用默认构造函数会造成错误
声明栈对象时调用默认构造,成员对象值是不确定的,默认构造函数不会对成员进行处理,输出成员结果是不确定的:
示例:
[cpp] view plaincopy
#include
using namespace std;
class test
{
private :
int mOne;
double mTwo;
public :
void getOne(){
cout<<"one: "<mOne<
}
void getTwo(){
cout<<"two: "<mTwo<
}
};
int main(){
test one;
one.getOne();
one.getTwo();
return 0;
}
定义一个不带参数的默认构造函数:
代码:
[cpp] view plaincopy
#include
using namespace std;
class test
{
private :
int mOne;
double mTwo;
public :
test(){
this->mOne=0;
this->mTwo=0.0;
}
void getOne(){
cout<<"one: "<mOne<
}
void getTwo(){
cout<<"two: "<mTwo<
}
};
int main(){
test one;
one.getOne();
one.getTwo();
return 0;
}
声明带参数的构造函数,但创建对象时没有传递参数,此时不能通过正常编译,原因是编译器不能再生成默认构造函数
代码:
[cpp] view plaincopy
#include
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: "<mOne<
}
void getTwo(){
cout<<"two: "<mTwo<
}
};
int main(){
test one;
one.getOne();
one.getTwo();
return 0;
}
在堆上创建构造函数,及其使用:
代码:
[cpp] view plaincopy
#include
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: "<mOne<
}
void getTwo(){
cout<<"two: "<mTwo<
}
};
int main(){
test *one = new test(1,2);
one->getOne();
one->getTwo();
delete one;
return 0;
}
阅读(1101) | 评论(0) | 转发(0) |