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

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

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

示例:

#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;
}

运行结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值