Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-遗产_C++_Inheritance - Fatal编程技术网

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。根据公共继承规则,Class
derived
可以访问类
的公共(和受保护)成员

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