C++ 多级继承与纯虚函数
包含纯虚函数的类不能有对象。这就是我关于纯虚函数的想法。我有下面的程序,它编译没有任何错误C++ 多级继承与纯虚函数,c++,C++,包含纯虚函数的类不能有对象。这就是我关于纯虚函数的想法。我有下面的程序,它编译没有任何错误 #include<iostream> using namespace std; class Father { public: virtual void foo()=0; }; class Son:public Father { // Nothing here }; int main() { } 这些错误是意外的,因为我继承了类Son和Grand\u-Sonaspu
#include<iostream>
using namespace std;
class Father {
public:
virtual void foo()=0;
};
class Son:public Father {
// Nothing here
};
int main() {
}
这些错误是意外的,因为我继承了类Son
和Grand\u-Son
aspublic
是否可以对涉及纯虚拟函数的类进行多级继承?
有什么建议吗?谢谢。您在Grand\u Son
C++中的
class Grand_Son:public Son {
public: <------- This will fix your compiler problem.
void foo() {
cout<<"\nFunction foo From Grand_Son\n";
}
};
您需要将您在grandson中的foo()实现声明为
public
类grandson:public-Son{
class Grand_Son:public Son {
public:
---^^^^^^^
void foo() {
cout<<"\nFunction foo From Grand_Son\n";
}
};
公众:
---^^^^^^^
void foo(){
cout这是完全无关的。您必须在public:
语句之后在Grand\u Son
类中声明您的foo()
函数
默认情况下(即没有可见性限定符),类成员是私有的,因此编译器会告诉您无法访问成员函数,因为它具有私有可见性。基于标准class.access.virt
使用所用表达式的类型在调用点检查访问
表示为其调用memeber函数的对象
memeber函数在其定义的类中的访问权限为
一般不知道
这意味着在您的示例中,它将使用Grand_Son检查memeber的可访问性。由于您没有将成员定义为public,因此它将是private(类成员默认为private)。它与public继承没有关系
并且将重写虚拟函数定义为private对于设计目的也很有用。假设您有一个具有需要重写的公共虚拟函数的接口。通过将派生类memeber函数实现为private,您可以强制调用方使用接口而不是具体类型。vate,检查它是否真的在类的公共部分。它在基类中是公共的,但在Grand\u Son
中不是。有趣的是,当使用Father*x=new Grand\u Son;x->foo()
时,它是可以的,因为现在,foo()是通过父级访问的,父级是公共的。这可以用来强制执行foo只能通过多态性使用。
class Grand_Son:public Son {
public: <------- This will fix your compiler problem.
void foo() {
cout<<"\nFunction foo From Grand_Son\n";
}
};
int main() {
Father* x = new Grand_Son();
x->foo();
}
class Grand_Son:public Son {
public:
---^^^^^^^
void foo() {
cout<<"\nFunction foo From Grand_Son\n";
}
};