定义构造函数的四种方法.doc

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
不但因为它是带有默认参数的构造函数,也因为它初始化成员的方式最为肓观,最为简洁。 这使构造函数也好像被封装在类声明里了。尽管构造函数初始化列表看起來简单,其实也 能完成复杂的初始化工作。
例如有一个商品类:
class ShangPin
{
std::s来自百度文库ring PM;〃品名
long SL;〃数量
double DJ;〃单价
double JE;//金额
• ••i
• • • •
};
其成员有品名、数量、单价、金额。显然金额的初始化不是直接完成的,只有数量和单价已知后它才能确定。尽管工作有点麻烦,但初始化列表也能胜任。 可以在大括号中,调用一个私有的函数來完成金额的初始化工作。
ShangPin(const std::string&m_PM="nothing"Jong m_SL=O,double m_DJ=O.O):PM(m_PM),SL(m_SL)/DJ(m_DJ){set_JE();}
这个类在此处的价值的就是说明类构造函数的工作方式。
1、笫一个构造函数,就是编译器合成的默认构造函数。它用于创建一个类对象而不显式地 初始化各个类成员。
Student(){}
Student stl;
这里创建一个学生类的对象stl。但对stl的姓甚名谁、学号大小、学分多少一无所知。
对于一个简单的类:我们无需显式地定义这个构造函数,因为编译器会隐式地调用它来创 建类对象。为了创建一个具体的类对象,有时可定义一个私有成员函数來初始化类的各个成 员。
比如Set_namefstring),Set_score(double).....
2、第二个构造函数带有三个参数:分别对应于三个类成员。经过类方法屮的定义,我们可 以在用户程序中创建一个各个成员赋有初值的类对象。
Student(const string& najong nu,double sc);
Student st2("LiuYang",0803,96.5);
定义类的构造函数
作者:Iyb661时间:20150613
定义类的构造函数有如下几种方法:
1、使用默认构造函数(类不另行定义构造两数):能够创建一个类对象,但不能初始化类 的各个成员。
2、显式定义带冇参数的构造函数:在类方法中定义,使用多个参数初始化类的各个数据 成员。
3、定义有默认值的构造函数:构造函数原型中为类的各个成员捉供默认值。
{
n ame=na;
n umber二nu;
scores=sc;
}
void Student::display()const
{
std::cout«HName: "vvname«,,/Number:,,«number«,,/Score:,,«scores«,,\n\n”;
}
这个学生类极为简单:除了创建和显示学生的姓名、学号、学分以外;什么工作也不做, 什么工作也做不了。
Student(const std::string& najong nu,double sc);
Student(const std:;string& na=l,HJong nu=0,double sc=0.0);
Student(const std:;string&na="noong nu=0,double
void ShangPin::set_JE()
{
JE=SL*DJ;
}
类成员的初始化工作是十分重要的。有时我们编写好的程序,在运行时会输出些莫名其妙 的乱码,这可能与我们初始化工作做不到位冇关。
根据程序对类的需求,我们应该更清晰地选择构造函数的编写方法。对于一般的类,构造 函数初始化列表通常'是最好的选择。
Student st3(HLiMing",0705,88.3); //同理
在所冇类型的构造函数中,带冇默认值的构造函数最为实用,也最为简洁。
4、正因为此,构造函数初始化列表的应用才被广泛地应用。
Student(const std:;string&na二"none",long nu二O’double
sc=0.0): name( na),number( nu),scores(sc){}
这里创建了一个学主类st2。他的姓名、学号、学分分别为LiuYang,0803,96.5c
值得注意的是:由于我们显式地定义了一个带有参数的构造函数,编译器合成的默认构造 函数将不再工作。因此,在用户程序中声明一个没冇成员值的学生类对象就不允许了。即下 面的代码是非法的!
Student st2;
3、对于第二个构造函数的问题,我们有两种方法来解决:一是同时显式地调用默认的构造 函数。即第1第2个构造函数同时调用。这样既可创建一个类对象,也能对其进行初始化。
当然,我们必须必须熟悉各种构造函数的工作方式,才能作出最恰如具分的选择。
sc=0.0): name( na),nu mber( nu),scores(sc){}
void display() const;
//void set(std::string najong nu,double sc);
};
Student::Student(const std::string& najong nu,double sc)
4、使用构造函数初始化列表:这个构造函数初始化成员的方式显得更紧凑。
例如:有一个学生类。其中存储了学生的姓名、学号和分数。
class Stude nt
{
private:
std::string name;
long number;
double scores;
public:
Student(){}//l:default constructor
另一个办法是定义一个参数带有默认值的构造两数。它兼有第1第2个构造函数的功能。 即创建一个类对象,同时为它赋初值。
Stude nt(const std::string& na=" non eJong n u=0,double sc=0.0);
Student st3;〃实际上st3也是有默认值的了
st3=Student("LiMing"/0705/88.3);
相关文档
最新文档