c++中初始化数据成员的方法

c++中初始化数据成员
当我们需要给类中数据初始化的时候,该怎么做?有什么方法?有几种?
我不敢说初始化数据成员的方法我都掌握了,我把常见的几种初始化数据成员的方法介绍下。

一、利用构造函数初始化数据成员

c++提供了构造函数来处理对象的初始化,在建立对象时,自动执行。
1)利用无参的构造函数

若使用无参数的构造函数初始化数据成员,初始化数据成员在函数体中执行,对不同的类对象都得到同一组初值。如下
class Tan
{
public:
	Tan();//无参数的构造函数初始化数据成员
	float area();
private:
	float weight;
	float length;
	
};
Tan::Tan()
{
	weight = 10;
	length = 20.34;
}
float Tan::area()
{
	return weight*length;
}
void main()
{
	Tan tan;
	cout<<"the area of tan is"<<tan.area()<<endl;

}
2)利用有参的构造函数

采用带参数的构造函数时, 在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数,以实现不同的初始化。实参是在定义对象时给出,定义对象的一般格式为  类名  对象名(实参1,实参2,实参3,等等)
class Tan
{
public:
	Tan(float w,float le);//有参的构造函数初始化数据
	float area();
private:
	float weight;
	float length;
	
};
Tan::Tan(float w,float le)
{
	weight = w;
	length = le;
}
float Tan::area()
{
	return weight*length;
}
void main()
{
	Tan tan1(20,3.33);
	Tan tan2(10,5.33);
	cout<<"the area of tan1 is"<<tan1.area()<<endl;
	cout<<"the area of tan2 is"<<tan2.area()<<endl;

}
二、利用构造函数初始化列表初始化数据成员

这种方法不在函数体内对数据成员初始化,而是在函数首部实现。
class Tan
{
public:
	Tan(float w,float le);
	float area();
private:
	float weight;
	float length;
	
};
Tan::Tan(float w,float le):weight(w),length(le)
{
	
}
float Tan::area()
{
	return weight*length;
}
void main()
{
	Tan tan1(20,3.33);
	Tan tan2(10,5.33);
	cout<<"the area of tan1 is"<<tan1.area()<<endl;
	cout<<"the area of tan2 is"<<tan2.area()<<endl;

}
还有一种是这样的,直接在类的内部利用初始化列表初始化数据成员
class Tan
{
public:
	Tan(float w,float le):weight(w),length(le){}
	float area();
private:
	float weight;
	float length;
	
};
float Tan::area()
{
	return weight*length;
}
void main()
{
	Tan tan1(20,3.33);
	Tan tan2(10,5.33);
	cout<<"the area of tan1 is"<<tan1.area()<<endl;
	cout<<"the area of tan2 is"<<tan2.area()<<endl;

}
初始化列表也可以无参数
class Tan
{
public:
	Tan():weight(20),length(10){}
	float area();
private:
	float weight;
	float length;
	
};
float Tan::area()
{
	return weight*length;
}
void main()
{
	Tan tan1;
	Tan tan2;
	cout<<"the area of tan1 is"<<tan1.area()<<endl;
	cout<<"the area of tan2 is"<<tan2.area()<<endl;

}
成员初始化的次序就是类中定义成员的次序,与初始化列表中的顺序无关。 没有默认构造函数的类类型的成员,以及const或引用类型的成员,都必须在构造函数初始化列表中进行初始化。const或引用类型的成员不能赋值,只能初始化。


最后贴个程序大家看看它的输出结果
class Tan
{
public:
	Tan(float w = 20,float le = 3.33);//有参的构造函数初始化数据
	float area();
private:
	float weight;
	float length;
	
};
Tan::Tan(float w,float le)
{
	weight = w;
	length = le;
}
float Tan::area()
{
	return weight*length;
}
void main()
{
	Tan tan1;
	Tan tan3(30,10);
	cout<<"the area of tan1 is"<<tan1.area()<<endl;
	cout<<"the area of tan3 is"<<tan3.area()<<endl;

}



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值