C++学习笔记20:派生类覆盖基类成员、类的保护成员

派生类覆盖基类成员

1 覆盖定义:

    派生类可以定义一个和基类成员同名的成员,这叫覆盖。
    在派生类中访问这类成员时,缺省的情况时访问派生类中定义的成员。
    要在派生类中访问由基类定义的同名成员时,要使用作用域符号::。

2 例子(见本工程paishengfugai.cpp)

//
// 基类和派生类有同名成员的情况
// 强调:不要在派生类和基类中写同名的成员变量
#include <iostream>

using namespace std;

class base
{
    int j;
public:
    int i;
    void func();
};

class derived:public base
{
public:
    int i;
    void func();
    void access()
    {
        // j = 5;  // error  原因是访问了基类的私有成员
        i = 5;  // 引用的是派生类的i   在派生类中访问这类成员时,缺省的情况时访问派生类中定义的成员。
        base::i = 5; //引用的是基类的i
        func(); // 派生类的func()函数
        base::func();   // 基类的
    }

};

int main()
{
    derived obj;    // obj占用的存储空间  Base::j  Base::i  i
    obj.i = 1;  // 派生类的i
    obj.base::i = 1;    //

}


3 不要在派生类和基类中定义同名的成员变量,但是定义同名的成员函数是常用的。

类的保护成员

1 基类的private成员:可以被以下函数访问

    --基类的成员函数
    --基类的友元函数

2 基类的public成员:可以被下列函数访问

    --基类的成员函数
    --基类的友元函数
    --派生类的成员函数
    --派生类的友元函数
    --其他的函数

3 基类的protected成员:可以被以下函数访问

    --基类的成员函数
    --基类的友元函数
    --派生类的成员函数可以访问当前对象的基类的保护成员

4 关于保护成员的案例(见本工程protectedeg.cpp)

//
// 保护成员案例
//
#include <iostream>

using namespace std;

class Father
{
private:
    int nPrivate;   // 私有成员
public:
    int nPublic;    // 公有成员
protected:
    int nProtected; // 保护成员
};

class Son:public Father
{
    void AccessFather()
    {
        nPublic = 1;    // ok
        //nPrivate = 1;   // wrong
        nProtected = 1; // ok 访问从基类继承的protected成员
        Son f;
        // f.nProtected = 1;   // wrong, f不是当前对象  AccessFather作用的才是当前对象
    }
};

int main()
{
    Father f;
    Son s;
    f.nPublic = 1;  // ok
    s.nPublic = 1;  // ok
    //f.nProtected;   // error
    //f.nPrivate;     // error
    //s.nProtected;   // error
    //s.nPrivate;     // error
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值