- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
定义构造函数的四种方法
定义类的构造函数 作者:lyb661 时间 定义类的构造函数有如下几种方法: 1、使用默认构造函数(类不另行定义构造函数):能够创建一个类对象,但不能初始化类的各个成员。 2、显式定义带有参数的构造函数:在类方法中定义,使用多个参数初始化类的各个数据成员。 3、定义有默认值的构造函数:构造函数原型中为类的各个成员提供默认值。 4、使用构造函数初始化列表:这个构造函数初始化成员的方式显得更紧凑。 例如:有一个学生类。其中存储了学生的姓名、学号和分数。 class Student { private: std::string name; long number; double scores; public: Student(){}//1:default constructor Student(const std::string na,long nu,double sc); Student(const std:;string na=,long nu=0,double sc=0.0); Student(const std:;string na=none,long nu=0,double sc=0.0):name(na),number(nu),scores(sc){} ……….. void display() const; //void set(std::string na,long nu,double sc); }; ......... Student::Student(const std::string na,long nu,double sc) { name=na; number=nu; scores=sc; } void Student::display()const { std::coutName: name, Number: number, Score: scores\n\n; } 这个学生类极为简单:除了创建和显示学生的姓名、学号、学分以外;什么工作也不做,什么工作也做不了。 这个类在此处的价值的就是说明类构造函数的工作方式。 1、第一个构造函数,就是编译器合成的默认构造函数。它用于创建一个类对象而不显式地初始化各个类成员。 Student(){} ................ Student st1; 这里创建一个学生类的对象st1。但对st1的姓甚名谁、学号大小、学分多少一无所知。 对于一个简单的类:我们无需显式地定义这个构造函数,因为编译器会隐式地调用它来创建类对象。为了创建一个具体的类对象,有时可定义一个私有成员函数来初始化类的各个成员。 比如Set_name(string) , Set_score(double)….. 2、第二个构造函数带有三个参数:分别对应于三个类成员。经过类方法中的定义,我们可以在用户程序中创建一个各个成员赋有初值的类对象。 Student(const string na,long nu,double sc); ................ Student st2(LiuYang,0803,96.5); 这里创建了一个学生类st2。他的姓名、学号、学分分别为LiuYang , 0803 , 96.5。 值得注意的是:由于我们显式地定义了一个带有参数的构造函数,编译器合成的默认构造函数将不再工作。因此,在用户程序中声明一个没有成员值的学生类对象就不允许了。即下面的代码是非法的! Student st2; 3、对于第二个构造函数的问题,我们有两种方法来解决:一是同时显式地调用默认的构造函数。即第1 第 2个构造函数同时调用。这样既可创建一个类对象,也能对其进行初始化。 另一个办法是定义一个参数带有默认值的构造函数。它兼有第1 第 2个构造函数的功能。即创建一个类对象,同时为它赋初值。 Student(const std::string na=none,long nu=0,double sc=0.0); ................ Student st3;//实际上st3也是有默认值的了 st3=Student(LiMing,0705,88.3); Student st3(LiMing,0705,88.3); //同理 在所有类型的构造函数中,带有默认值的构造函数最为实用,也最为简洁。 4、正因为此,构造函数初始化列表的应用才被广泛地应用。 Student(const std:;string na=none,long nu=0,double sc=0.0):name(na),number(nu),scores(sc)
文档评论(0)