委托构造函数 与 继承构造函数

委托构造函数 

class A
{
public:
    A(){}
    A(int a)
    {
        ma = a;
    }
    A(int a,int b)
    {
        ma = a;
        mb = b;
    }
    A(int a,int b,int c)
    {
        ma = a;
        mb = b;
        mc = c;
    }  
private:
    int ma,mb,mc;
};

我们会发现下面的有参构造函数都是上面的复制后续写 C++11后可以这样写

class A
{
public:
    A(){}
    A(int a)
    {
        ma = a;
    }
    A(int a,int b):A(a)
    {
        mb = b;
    }
    A(int a,int b,int c):A(a,b)
    {
        mc = c;
    }  
private:
    int ma,mb,mc;
};

继承构造函数

继承中通常会出现两种问题:

1.父类有多个构造函数  子类若继承该父类 就要把这些父亲的构造函数都写出来 作为 子类的构造函数  

2.父类和子类中有重名函数(即函数重载,但不是虚函数重写),而我们创建子类对象 想调用父亲的重名函数是无法调用的 会编译失败

解决上述两个问题可以用继承构造函数

#include <iostream>
#include <string>
using namespace std;

class Base
{
public:
    Base(int i) :m_i(i) {}
    Base(int i, double j) :m_i(i), m_j(j) {}
    Base(int i, double j, string k) :m_i(i), m_j(j), m_k(k) {}

    int m_i;
    double m_j;
    string m_k;
};

class Child : public Base
{
public:
    Child(int i) :Base(i) {}
    Child(int i, double j) :Base(i, j) {}
    Child(int i, double j, string k) :Base(i, j, k) {}
};

int main()
{
    Child c(520, 13.14, "i love you");
    cout << "int: " << c.m_i << ", double: " 
         << c.m_j << ", string: " << c.m_k << endl;
    return 0;
}

另外如果在子类中隐藏了父类中的同名函数,也可以通过using的方式在子类中使用基类中的这些父类函数:

#include <iostream>
#include <string>
using namespace std;

class Base
{
public:
    Base(int i) :m_i(i) {}
    Base(int i, double j) :m_i(i), m_j(j) {}
    Base(int i, double j, string k) :m_i(i), m_j(j), m_k(k) {}

    void func(int i)
    {
        cout << "base class: i = " << i << endl;
    }
    
    void func(int i, string str)
    {
        cout << "base class: i = " << i << ", str = " << str << endl;
    }

    int m_i;
    double m_j;
    string m_k;
};

class Child : public Base
{
public:
    using Base::Base;
    using Base::func;
    void func()
    {
        cout << "child class: i'am luffy!!!" << endl;
    }
};

int main()
{
    Child c(250);
    c.func();
    c.func(19);
    c.func(19, "luffy");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值