+ -
当前位置:首页 → 问答吧 → 类的私有成员到底能不能被继承

类的私有成员到底能不能被继承

时间:2011-12-07

来源:互联网

书上说: 保护成员和私有成员的区别在于前者能被继承。

书上又说:直接基类的私有成员也会被继承,但派生类不能直接访问直接基类的私有成员。

到底怎么回事啊,郁闷

作者: onezzx2234   发布时间: 2011-12-07

私有成员能被继承。
派生类不能访问基类的私有成员,因为基类的私有成员只能在基类内部使用。出了基类的作用域就不能被访问了。

作者: pqpqr   发布时间: 2011-12-07

这两句话没什么矛盾吧。
直接基类的私有成员也会被继承,但派生类不能直接访问直接基类的私有成员。
保护成员和私有成员的区别在于前者能被继承,而且能直接访问。

作者: xxg1413   发布时间: 2011-12-07

取决于“继承”的含义

下例的B和A一样大,因为m也在B里,只是不能访问

C/C++ code
class A
{
private:
    char m[5];
};

class B: public A
{
};


int main()
{
    cout <<sizeof(B) <<endl;
    
    return 0;
}

作者: yisikaipu   发布时间: 2011-12-07

啥书,换本吧

作者: Demon__Hunter   发布时间: 2011-12-07

我理解如下:保护成员和私有成员的区别在于前者能被继承是指
基类的保护成员可以被派生类的成员函数访问,而基类的私有成员不能被派生类的成员函数访问

这么理解对吗?

作者: onezzx2234   发布时间: 2011-12-07

可以被继承,但是派生类不能使用,只能供基类使用

作者: zzcmx2008   发布时间: 2011-12-07

可以被继承,但是派生类不能使用,只能供基类使用

作者: zzcmx2008   发布时间: 2011-12-07

C/C++ code

#include <iostream>
#include <string.h>
using namespace std;
class base
{
    public:
    base(){}
    base(int a,int b):id(a),num(b){}
    virtual ~base(){}
    void fun1(){}
    protected:
    int id;
    private:
    int num;
};
class derived:public base
{
    public:
    derived(){}
    derived(int a,int b,string s):base(a,b),name(s){}
    void fun2(){id = 5;}//OK derived class member can access the protected member in the base class
    void fun4(derived &md)
    {
        md.id = 77;
    }
    //void fun3(){num = 10;}//error int base::num is private
    private:
    string name;
};
int main()
{
    //public inheritance means is-a
    //every derived class object has a copy of base class
    //so:
    derived md1;
    base mb1;
    mb1 = md1;//here we can know derived class inherit every thing from the base class;
    return 0;
}

作者: qscool1987   发布时间: 2011-12-07

1.继承即代码复用 子类包含基类的一切成员
2.public protected private访问权限是针对任何其他代码访问本类成员的权限,继承也不例外,子类访问基类的东西也要视访问权限而定
3.在继承环境里public和protected等价,在非继承环境里如组合模式下protected和private等价
4.基类private成员可以通过基类public或子类protected或友元函数访问

作者: stendson   发布时间: 2011-12-07

引用 1 楼 pqpqr 的回复:
私有成员能被继承。
派生类不能访问基类的私有成员,因为基类的私有成员只能在基类内部使用。出了基类的作用域就不能被访问了。


sp........

作者: skyworth98   发布时间: 2011-12-07