Day39、构造函数重载、缺省构造函数、拷贝构造函数、初始化表

一、            构造函数和初始化表

1、构造函数可以重载

1)构造函数通过参数表的差别化形成重载关系,创建对象时通过构造实参类型选择匹配,表示不同的对象创建方式

2)可以适当使用缺省参数,减少构造函数重载版本数量,但注意不要和缺省参数构造歧义错误。

  1#include<iostream>

  2using namespace std;

  3class student{

  4public:

 5     student(const string&name,int age,int no){

 6         m_name=name;

 7         m_age=age;

 8         m_no=no;

 9     }

 10    student(const string& name){

 11        m_name=name;

 12        m_age=0;

 13        m_no=0;

 14     }

 15    student(void){

 16        m_name="无名";

 17        m_age=0;

 18         m_no=0;

 19     }

 20    void who(void){

 21        cout<<"我叫"<<m_name<<",今年"<<m_age<<"岁"<<endl;

 22        cout<<"学号"<<m_no<<endl;

 23     }

24 private:

 25    string m_name;

 26    int m_age;

 27    int m_no;

 28};

 29int main(void){

 30     student s1("张飞",25,10086);

 31    s1.who();

 32    student s2("赵云");

 33    s2.who();

 34    student s3;//不要写小括号

 35    //student s3=student();//OK 等价于上句

 36    s3.who();

 37    return 0;

 38 }

等价于:

  1#include<iostream>

  2using namespace std;

  3class student{

  4public:

 5     student(const string&name="无名",intage=0,int no=0){

 6         m_name=name;

 7         m_age=age;

 8         m_no=no;

 9     }

 10#if 0

 11    student(const string& name){

 12        m_name=name;

 13        m_age=0;

 14        m_no=0;

 15     }

 16    student(void){

 17        m_name="无名";

 18        m_age=0;

 19        m_no=0;

 20     }

 21#endif

 22    void who(void){

 23        cout<<"我叫"<<m_name<<",今年"<<m_age<<"岁"<<endl;

24         cout<<"学号"<<m_no<<endl;

 25     }

 26private:

 27    string m_name;

 28    int m_age;

 29    int m_no;

 30};

 31int main(void){

 32    student s1("张飞",25,10086);

 33    s1.who();

 34    student s2("赵云");

 35    s2.who();

 36    student s3;//不要写小括号

 37    //student s3=student();//OK 等价于上句

 38    s3.who();

 39    return 0;

 40 }

2、缺省构造函数

1) 如果一个函数没有定义构造函数,编译器会提供一个缺省的无参构造函数,使成员变量获得定义。

2) 对于基本类型的成员不做初始化

3) 对于类类型的成员变量(成员子对象),调用相应类型的无参构造函数初始化

  1#include<iostream>

  2using namespace std;

  3class teacher{

  4public:

 5     void who(void){

 6        cout<<m_name<<','<<m_

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值