C++ 为什么派生类可以调用基类中的成员函数?

C++ 为什么派生类可以调用基类中的成员函数?,c++,inheritance,virtual,C++,Inheritance,Virtual,我的问题是,我有三个类,一个是抽象类。B从A派生,然后C从B派生 我只是列出了我有疑问的函数 class A{ public:virtual void storedata(int a, int b, int c, int d)=0; } B.h class B: public A{ public:virtual void storedata(int a, int b, int c, int d); } B.cpp void storedata(int a, int b, int c, int

我的问题是,我有三个类,一个是抽象类。B从A派生,然后C从B派生

我只是列出了我有疑问的函数

class A{
public:virtual void storedata(int a, int b, int c, int d)=0;
}

B.h
class B: public A{
public:virtual void storedata(int a, int b, int c, int d);
}
B.cpp
void storedata(int a, int b, int c, int d)
{ do something }

C.h
class C: public B{
public:virtual void storedata(int a, int b, int c, int d); 
}

C.cpp
void storedata(int a, int b, int c, int d)
{
    B::storedata(int a, int b, int c, int d);
}

为什么派生类C可以调用C.cpp中的B::storedata?

为什么它不能?重写虚函数的目的是允许您自定义派生类型的对象的行为,但有时所需的行为包括执行基所做的处理,可能是有条件的,也可能是通过某些预操作或后操作。实际上,您可以提供纯虚拟函数的实现,这非常有用,这样派生类就可以方便地在适合抽象基类的实现时调用抽象基类的实现。在这种情况下,重写是无用的,因为它只做B版本所做的事情,但一般来说,允许调用B版本可能是有用的。

类C的函数storedata可能不会调用类B的函数storedata,因为类B中的函数storedata声明为具有访问控制
私有

因此,编译器将发出一个错误

如果在B类中声明它具有
public
protected
访问控制,则C类可以调用它。可以调用它,因为在类C的函数storedata中,调用指定了引用类B中函数storedata的限定名称

基类中声明的函数也是派生类的成员。
如果派生类声明的函数与基类中的函数同名,则派生类中的函数将隐藏基类中的函数。通过使用引用基类中函数的限定名,可以在派生类的某些方法中调用基类的函数。功能是否虚拟并不重要


编辑:我看到你已经阅读了我的帖子,并将私有访问控制更改为公共访问控制。:)

因为你指定了它?或者你在问为什么派生类C可以调用类B的storedata()?但是,调用B'函数的对象在哪里,或者调用B'函数的指针在哪里?C对象嵌入了B对象,因为它是从B派生的,所以它可以使用指向嵌入子对象的“this”指针调用B函数。非常感谢。我理解这个问题。