定义构造函数的四种方法

定义构造函数的四种方法

ID:44464120

大小:35.50 KB

页数:3页

时间:2019-10-22

定义构造函数的四种方法_第1页
定义构造函数的四种方法_第2页
定义构造函数的四种方法_第3页
资源描述:

《定义构造函数的四种方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、定义类的构造函数作者:Iyb661时间:20150613定义类的构造函数有如下几种方法:1、使用默认构造函数(类不另行定义构造两数):能够创建一个类对象,但不能初始化类的各个成员。2、显式定义带冇参数的构造函数:在类方法中定义,使用多个参数初始化类的各个数据成员。3、定义有默认值的构造函数:构造函数原型中为类的各个成员捉供默认值。4、使用构造函数初始化列表:这个构造函数初始化成员的方式显得更紧凑。例如:有一个学生类。其中存储了学生的姓名、学号和分数。classStudent{private:std::stringname

2、;longnumber;doublescores;public:Student(){}//l:defaultconstructorStudent(conststd::string&najongnu,doublesc);Student(conststd:;string&na=l,HJongnu=0,doublesc=0.0);Student(conststd:;string&na="noongnu=0,doublesc=0.0):name(na),number(nu),scores(sc){}voiddisplay()co

3、nst;//voidset(std::stringnajongnu,doublesc);};Student::Student(conststd::string&najongnu,doublesc){name=na;number二nu;scores=sc;}voidStudent::display()const{std::cout«HName:"vvname«,,/Number:,,«number«,,/Score:,,«scores«,,”;}这个学生类极为简单:除了创建和显示学生的姓名、学号、学分以外;什么工作

4、也不做,什么工作也做不了。这个类在此处的价值的就是说明类构造函数的工作方式。1、笫一个构造函数,就是编译器合成的默认构造函数。它用于创建一个类对象而不显式地初始化各个类成员。Student(){}Studentstl;这里创建一个学生类的对象stl。但对stl的姓甚名谁、学号大小、学分多少一无所知。对于一个简单的类:我们无需显式地定义这个构造函数,因为编译器会隐式地调用它来创建类对象。为了创建一个具体的类对象,有时可定义一个私有成员函数來初始化类的各个成员。比如Set_namefstring),Set_score(dou

5、ble).....2、第二个构造函数带有三个参数:分别对应于三个类成员。经过类方法屮的定义,我们可以在用户程序中创建一个各个成员赋有初值的类对象。Student(conststring&najongnu,doublesc);Studentst2("LiuYang",0803,96.5);这里创建了一个学主类st2。他的姓名、学号、学分分别为LiuYang,0803,96.5c值得注意的是:由于我们显式地定义了一个带有参数的构造函数,编译器合成的默认构造函数将不再工作。因此,在用户程序中声明一个没冇成员值的学生类对象就不允

6、许了。即下面的代码是非法的!Studentst2;3、对于第二个构造函数的问题,我们有两种方法来解决:一是同时显式地调用默认的构造函数。即第1第2个构造函数同时调用。这样既可创建一个类对象,也能对其进行初始化。另一个办法是定义一个参数带有默认值的构造两数。它兼有第1第2个构造函数的功能。即创建一个类对象,同时为它赋初值。Student(conststd::string&na="noneJongnu=0,doublesc=0.0);Studentst3;〃实际上st3也是有默认值的了st3=Student("LiMing"

7、/0705/88.3);Studentst3(HLiMing",0705,88.3);//同理在所冇类型的构造函数中,带冇默认值的构造函数最为实用,也最为简洁。4、正因为此,构造函数初始化列表的应用才被广泛地应用。Student(conststd:;string&na二"none",longnu二O’doublesc=0.0):name(na),number(nu),scores(sc){}不但因为它是带有默认参数的构造函数,也因为它初始化成员的方式最为肓观,最为简洁。这使构造函数也好像被封装在类声明里了。尽管构造函数初

8、始化列表看起來简单,其实也能完成复杂的初始化工作。例如有一个商品类:classShangPin{std::stringPM;〃品名longSL;〃数量doubleDJ;〃单价doubleJE;//金额•••i••••};其成员有品名、数量、单价、金额。显然金额的初始化不是直接完成的,只有数量和单价已知后它才能确定。尽

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。