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