继承和派生(2)--继承中对构造函数、同名函数的处理方式

继承和派生--继承中对构造函数、同名函数的处理方式

1 继承中的构造和析构

先调用父类构造,再调用其他成员构造(其他类作为派生类的成员),再调用自身构造 ,析构的顺序与构造相反。

#include <iostream>
using namespace std;

 // 基类
class Base
{
public:
    Base()
    {   
        cout << "Base构造" << endl;
    }
    ~Base()
    {   
        cout << "Base析构" << endl;
    }
};

// 其他类
class Other
{
public:
    Other()
    {   
        cout << "Other构造" << endl;
    }   
    ~Other()
    {   
        cout << "Other析构" << endl;
    }   
};

// 派生类
class Derive : public Base
{
public:
    Derive()
    {
        cout << "Derive构造" << endl;
    }
    ~Derive()
    {
        cout << "Derive析构" << endl;
    }

    Other other;    // 其他类作为派生类的成员
};

int main()
{
    Derive derive;
    return 0;
}

structure



2 继承中的同名成员处理

当子类重新定义了父类中的同名成员函数,子类的成员函数会隐藏掉父类中所有重载版本的同名成员,可以利用作用域显示指定调用。

#include <iostream>
using namespace std;

class Base
{
public:
    void showAge()
    {   
        cout << "Base::m_Age = " << m_Age << endl;
    }   
    int m_Age;
};

class Derive : public Base
{
public:
    void showAge()
    {   
        cout << "Derive::m_Age = " << m_Age << endl;
    }   
    int m_Age;
};

int main()
{
    Derive derive;

    derive.m_Age = 10; 
    derive.showAge();

	// 利用作用域访问父类中的同名成员
    derive.Base::m_Age = 20; 
    derive.Base::showAge();
        
    return 0;
}

在这里插入图片描述



3 继承中的同名静态成员处理

当子类重新定义了父类中的同名成员函数,子类的成员函数会隐藏掉父类中所有重载版本的同名成员,可以利用作用域显示指定调用。(结论与同名普通成员一致,只不过调用方式有两种:1.通过对象,2.通过类名)

#include <iostream>
using namespace std;

class Base
{
public:
    static void showAge()
    {   
        cout << "Base::m_Age = " << m_Age << endl;
    }
    static int m_Age; // 类内声明
};
int Base::m_Age = 18;   // 类外初始化
           
class Derive : public Base
{          
public:    
    void showAge()
    {      
        cout << "Derive::m_Age = " << m_Age << endl;
    }      
    int m_Age;
};         
           
int main() 
{          
    Derive derive;
           
    derive.m_Age = 10;
    derive.showAge();
           
    // 1.通过对象访问
    derive.Base::m_Age = 20; 
    derive.Base::showAge();

    // 2.通过类名访问
    Derive::Base::m_Age = 30;
    Derive::Base::showAge();

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值