C++ C++;-遗产
我希望下面的代码片段会给出编译错误,因为派生类将没有我在C++ C++;-遗产,c++,inheritance,C++,Inheritance,我希望下面的代码片段会给出编译错误,因为派生类将没有我在pub\u fun()中尝试访问的priv\u var。但它编译后,我得到了下面提到的输出。有人能解释一下这背后的理论吗 class base { private: int priv_var = 90; public: int pub_fun(); } b; class derived : public base { } d; int base::pub_fun() { cout << priv_var <
pub\u fun()
中尝试访问的priv\u var
。但它编译后,我得到了下面提到的输出。有人能解释一下这背后的理论吗
class base {
private:
int priv_var = 90;
public:
int pub_fun();
} b;
class derived : public base {
} d;
int base::pub_fun() { cout << priv_var << "\n"; }
int main() {
d.pub_fun();
return 0;
}
由于方法
pub_fun
是在基类中声明的,因此它是编译的。这就是为什么它可以访问私有成员priv\u var
。如果您在derived
中创建了一个方法,并试图访问priv\u var
,您将看到编译时错误。1。根据公共继承规则,Classderived
可以访问类基
的公共(和受保护)成员
2.类base
的成员可以访问所有其他base
成员,因为它们属于同一类
d.pub_fun()代码>是有效的,因为1.和int base::pub_-fun(){cout,但我使用的是派生类对象'd.pub_-fun()'。那么,这个访问是如何解决的。我可以使用'd.base::pub_-fun();'理解priv-var访问,但不能使用'd.pub_-fun();除非您在派生类中覆盖函数,否则函数调用将在访问该基类的私有变量的基类中完成。即使您使用派生类,函数也定位在基类中。派生类可以定义自己的方法,这些方法将存在于派生类中,并且这些方法将ot有权访问priv\u var
。因此,换句话说,您的类实例中位于base
中的部分有权访问base
@moonlights的私有空间。只能重写虚拟的成员函数。派生类中与方法同名的方法在基类中隐藏基类方法如果你遵循你的逻辑,@ B.Bala,那么派生类中就没有任何的BaseCases了。但是,这不是C++如何操作的。在C++中,派生类扩展了基类,所以它具有从基础到顶部提供的任何东西。注意:你的程序自从<代码> int Base::ub_fun()
不返回声明的int
。
90