Класс, содержащий чистую виртуальную функцию, не может иметь объект. Это была моя идея о чистых виртуальных функциях. У меня есть следующая программа, и она скомпилирована без ошибок.Многоуровневое наследование и чистые виртуальные функции
#include<iostream>
using namespace std;
class Father {
public:
virtual void foo()=0;
};
class Son:public Father {
// Nothing here
};
int main() {
}
Ожидалось, что оба класса не имеют объекта. Но следующая программа давала мне ошибки, когда я пытался иметь многоуровневое наследование от класса, содержащего чистую виртуальную функцию.
#include<iostream>
using namespace std;
class Father {
public:
virtual void foo()=0;
};
class Son:public Father {
// Nothing here
};
class Grand_Son:public Son {
void foo() {
cout<<"\nFunction foo From Grand_Son\n";
}
};
int main() {
Grand_Son x;
x.foo();
}
Ошибки показаны ниже.
In function 'int main()':|
|error: 'virtual void Grand_Son::foo()' is private|
|error: within this context|
||=== Build finished: 2 errors, 0 warnings ===|
Ошибки были неожиданными, поскольку я унаследовал классы Son
и Grand_Son
в public
.
Возможно ли иметь многоуровневое наследование классами, включающими чистые виртуальные функции?
Любые предложения? Спасибо.
Если что-то считается приватным, проверьте, действительно ли он находится в общедоступной части вашего класса. Он является общедоступным в вашем базовом классе, но не в 'Grand_Son'. – Zeta
Самое смешное, что при использовании 'Father * x = new Grand_Son; x-> foo(); ', было бы хорошо, потому что теперь через foo() открывается через Father, где он является общедоступным. Это можно использовать для обеспечения того, чтобы foo использовался только через полиморфизм. – stefaanv