我在C ++中遇到了与私有继承有关的问题。 我的问题基于与此页面here相关的参考。 (在“但我们需要继承什么?”标题下)
案例是我要声明一个带有公共虚函数的基类。然后我在私有继承下继承基类并将其命名为派生类。这显示如下
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作为派生的上述函数调用函数的一部分来调用,我该怎么办?
答案 0 :(得分: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();
答案 1 :(得分:1)
由于您将base
作为私有基类继承,这意味着base
(包括base::func_1
)的所有公共成员在派生时都是私有的。当您将derived::func_1
声明为public
时,编译器会抱怨。
如果您需要公开derived::func_1
,那么您应该公开继承base
。如果您不需要将其公开,则应将derived::func_1
声明为私有。