1

我从基类 A 的对象的子类 B 中/从子类 B 中放置/获取值。但我无法分配或获取该值。我的代码是:

class A
{

};

class B: A
{
    string SID;
};

class C: A
{
    string Name;
};

class D : A
{
    string Name;
};

class E
{
    A a;
    UINT32 AccessLevel;
};

.......

main()
{
    E e;
}

使用 e 的对象试图获取子类 B 的值。

我需要从 B 类获取 SID?

谢谢,

4

1 回答 1

1

C++11 标准 11/3 说:

private默认情况下,使用关键字 class 定义的类的成员。

在 11.2/2

在没有基类的访问说明符的情况下,private当使用类键类定义类时,假定[...]。

在 11.2/1:

private如果使用访问说明符将一个类声明为另一个类的基类,则基类的publicprotected成员可以作为private派生类的成员访问。

那是什么意思?首先:

class A {};
class B : A {};

在这里A,凭借 11.2/2 是私有继承的。如果您想继承变量并且只想在派生类中为变量实现 getter/setter,这可能没问题,但这通常被认为是不好的风格。

但是,在您的情况下,如 11/3 所述,您的成员根本不会被继承,因为它们是私有成员:

class A
{
    public:
        int a; // inherited
    protected:
        int b; // inherited
    private:
        int c; // NOT inherited
};

尤其是

class A { int a; };

相当于

class A { private: int a; };

因此,您可以通过使它们或(参见 11.2/1)使您的成员可从派生类中访问:publicprotected

class A { public: int a; };
class B : A {}; // privately inherits a

如果你想让它可以从你的派生类之外访问,你也必须继承public

class A { public: int a; };
class B : public A {}; // publicly inherits a

但这不是你通常会做的。将变量设为私有并仅公开这些变量的 getter 和 setter 被认为是更好的风格:

class A
{
    public:
        int get_a() const { return a_; }
        void set_a(int val) { a_ = val; }

    private:
        int a_;
};

class B : public A {}; // now publicly inherits the getters and setters
                       // but not a_ itself
于 2013-10-08T12:17:17.840 回答