C++中,public继承时,子类public成员函数能含有基类private成员么

如题所述

Class Base {
public:
    Base();
    ~Base();
    
    void callfun() { fun(); }
private:
    void fun();
};

Class D {
public:
    void fun();    //此时的fun函数,是override,不是overload,基类的fun无任何关系
    void fun(int a);    //此时的fun是个新函数,与基类的fun无任何关系,是overload
    
    void hello() { Base::callfun(); }
};

无论何种情况,D都无法直接访问Base的fun函数,只能访问到自己的fun函数而已。

可以通过hello函数这样方法来间接访问。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-28
基类设置为private的成员子类可以继承,但是无法访问。追问

可以继承,但是无法访问。。。这是什么意思?

可以继承,但是无法访问。。。这是什么意思?

追答

给你举个例子吧,假如我有下面的两个类:

其中val是基类的私有成员。如果声明一个基类对象,你可以看到下面的情况:

也就是说子类是继承了父类的这个成员的。但是:

智能报错系统就提示你这个成员是不可访问的。

这意思就好像某人从父亲那里继承了一个宝盒,但钥匙却不在他手里,所以没有办法,只能看到,但用不了。

追问

有点晕啊,那照这样说,所谓的继承当然是所有都能继承咯,有不能继承的么?

无非就是个访问方式的问题?

追答

是的,父类的东西子类都能继承,但不一定可以访问。private本来就是限制子类访问的,只有本类能访问。你在设计一个类的成员时,如果需要被继承,就不应该设置为private。知道这一点就好了。

第2个回答  2013-07-28
记住:
private类型只有当前类才能访问(在继承这方面)
访问私有类型的有友元和内联
相似回答