0

我有一个与 C++ 中的私有继承有关的问题。我的问题基于与此页面相关的参考。(在标题“但是如果我们确实需要继承怎么办? ”)

重点是我声明了一个带有公共虚函数的基类。然后我在私有继承下继承基类并将其命名为派生类。如下所示

    class base {
            public:
            base() {}
            virtual ~base() {}
            virtual void func_1() {
                cout<<"base func1"<<endl;
            }
            void func_t() {
                cout<<"base funct"<<endl;
                func_3();
            }
            private:
            void func_3() {
                cout<<"base func3"<<endl;
                func_1();
            }
        };

class derived: private base {
public:
    derived() {}
    ~derived() {}
    virtual void func_1() {
        cout<<"derived func1"<<endl;
    }
};

base* b = new derived;
b->func_t();

上述语句给出的错误是 base 是派生的不可访问的基础。如果我想调用 func_1 作为派生的上述函数调用函数的一部分,我该怎么办?

4

2 回答 2

1

private表示无法从外部访问名称和成员。与私有基类的对话是一种情况。您可以简单地将这个对话包装到一个成员函数中以使其工作:

class derived
  : private base {
public:
    // other stuff

    base* get_base() {
        return this;
    }
};

derived* d = new derived;
base* b = d->get_base();
b->func_t();
于 2013-07-24T10:26:56.210 回答
1

由于您作为私有基类继承base,这意味着base(包括base::func_1)的所有公共成员在派生时都是私有的。当你声明derived::func_1public.

如果您需要derived::func_1公开,那么您应该base公开继承。如果您不需要它是公开的,那么您应该声明derived::func_1为私有的。

于 2013-07-24T10:51:45.823 回答