首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求教关于继承的有关问题

2013-08-25 
求教关于继承的问题本帖最后由 iverain 于 2013-08-13 11:21:21 编辑教材上说“派生类不能访问其基类的priv

求教关于继承的问题
本帖最后由 iverain 于 2013-08-13 11:21:21 编辑 教材上说
    “派生类不能访问其基类的private成员,否则会破坏基类的封装性。但是,派生类能够访问基类的public成员和protected成员。基类中不应该让派生类通过继承而访问的成员要在基类中声明为private。派生类只能通过基类public和protected接口提供的访问函数访问基类的private成员”
    我的问题是:
    1. 上面说派生类能够访问基类的public和protected成员。派生类不是已经继承了基类的public和protected成员了吗,他能用自己的成员去访问基类吗?
    2. 
    派生类不是已经继承了基类的public,protected和private属性吗,那是不是就意味着系统为派生类继承来的这些成员分配内存?还是说派生类中的基类部分不是新分配内存,而只是一个类似于指向基类成员的指针?不知道我有没有表述清楚问题。
    换个具体的说法:
    class a                               class b
    {                                     {
    public:                               public:
        void setA(int);                       void setA(int);
        int getA();                           int getA();
    private:                                  int getAplus1();
        int x;                             private:
    }                                         int x;
                                           }
    上面是我没有用继承的方法声明了两个类,那我用继承来声明b和直接声明b,b的内部结构是不是一样的?

继承 C++
[解决办法]
1. 派生类能够访问基类的public和protected成员 等价于 能用自己的成员中使用基类的public和protected成员
2.用继承来声明b和直接声明b,b的内部结构是一样的。继承只是语法上的,大部分是编译时期固定;除非涉及到虚函数等才存在运行时指针间接关系
[解决办法]

引用:
1. 派生类能够访问基类的public和protected成员 等价于 能用自己的成员中使用基类的public和protected成员
2.用继承来声明b和直接声明b,b的内部结构是一样的。继承只是语法上的,大部分是编译时期固定;除非涉及到虚函数等才存在运行时指针间接关系

我觉得不一样,至少继承多了一个转换的关系 
(base & operator=(const derived &))
(base * operator=(const derived *))
????
[解决办法]
class b : public a
{
public:
    int getAplus1();
};

剩下的都是a的成员啊,可以访问(有权限)如: 
int b::getAplus1()
{
    return(this->getA() + 1);
    或者
    return(this->a::getA() + 1);
}

我觉得b的对象里面有一个a的对象
(深度探索C++对象模型里面有这个... 我讲的很可能不对)
你可以看看这本书,如果有需要的话,
也可以问问专业的人士,比如supermegaboy,frank1989..... 他们的解答会比较专业
[解决办法]
访问权限,通常是两个类之间的关系。
或者一个类和和她的友元函数,有友元类,以及类和全局函数之间的关系。

任何全局函数可以访问类的公共成员

派生类和基类的访问关系,是两个类之间的关系;
派生类可以访问,派生类成员的父类子对象的,
全局的父类对象的,派生类成员函数自己的参数表里的父类对象的;
派生类成员函数的内部定义的父类对象的保护和公共的非静态成员变量,也可以通过这些对象访问
父类的保护和公共的非静态成员变量及函数。
派生类成员函数,可以父类的保护得和公共的静态成员变量以及函数。

不可访问,任何父类的私有函数以及成员。
私有成员,只有一个类自己和友元函数,友元类可以访问。

保护成员,除了类和他的友元之外,和可以被子类访问,子类的子类能否访问,和继承的访问权限有关。


热点排行