我有没有办法derived class
访问private
的{{1}}成员,同时能够创建base class
个对象derived
内的base class
方法?
这样的事情:
base class
错误如下:
class Derived;
class Base
{
public:
void func()
{
// I want to create the derived obj here
Derived derived;
derived.func();
}
public:
int mBase = 5;
};
class Derived : public Base
{
public:
void func()
{
// I need to have access to the private members of Base inside this method
mBase = 6;
}
};
我该怎么办?
谢谢
答案 0 :(得分:4)
为了能够使用Derived
类并在其中调用成员函数(包括构造函数和析构函数),完整定义需要可用。在这种情况下,它不在Base::func
函数中。
解决方案很简单:不要定义func
内联,只需声明它,然后在定义Derived
类后实现(定义)它。
答案 1 :(得分:3)
访问基类私有成员的派生类
通常只需撰写protected
而不是private
。你有什么理由不能这样做吗?
Error: derived uses undefined class Derived.
只需在基类定义中声明 func
,并且在定义派生类之后只定义:
class Base {
public:
void func();
protected:
int mBase = 5;
};
class Derived : public Base {
public:
void func() {
mBase = 6;
}
};
void Base::func() {
Derived derived;
derived.func();
}
答案 2 :(得分:1)
您应该阅读 polymorphism 。你可能想要的是make func()virtual:
class Base
{
public:
virtual void func() { /* Base behavior */ } // or pure = 0
virtual ~Base() = default; // don't forget!
public:
int mBase = 5;
};
class Derived : public Base
{
public:
void func() override
{
// Derived behavior
}
};
关于访问Base::mBase
,您有两种选择:
mBase
受保护