Допустим, у меня есть абстрактный класс с функцией под названием print
, И скажем, у меня есть другой класс, который наследует от старшего класса и определяет функцию print
,
Правильно ли говорить, что старшие классы функционируют print
никогда не будет называться?
Мои дебаты в том случае, когда у меня есть указатель старшего на ребенка. И я называю print
Функция с использованием этого указателя. Если я не объявил функцию virtual
он должен попытаться использовать абстрактную функцию. Но это не может, и вот где я застреваю.
Заранее спасибо.
Изменить: я добавил пример. Спасибо за это предложение, так как оно решило мой вопрос. Нет такого понятия, как не виртуальный абстрактный метод.
// Example program
#include <iostream>
using namespace std;
class A{
public:
void print()=0;//I have to add virtual before declaring function
};
void A::print(){
cout<<"1"<<endl;
}
class B: public A{
public:
void print(){cout<<"2"<<endl;}
};
int main(){
B b;
b.print();
A* a=&b;
a->print();
b.A::print();//here I called the abstract method
return 0;
}
Допустим, у меня есть абстрактный класс с функцией «print». И скажем, у меня есть другой класс, который наследует от класса отца и определяет функцию print. Правильно ли говорить, что функция «классы отца» print никогда не будет вызываться?
Нет.
Мои дебаты в том случае, когда у меня есть указатель «отец» на «сын». И я вызываю функцию печати, используя этот указатель. Если я не объявил функцию виртуальной, она должна пытаться использовать абстрактную функцию.
Хорошо, так что если это не так virtual
будет вызвана функция «отец» (или, по крайней мере, будет предпринята попытка сделать это). Это отвечает на ваш предыдущий вопрос.
Если это virtual
, переопределение означает, что будет вызвана дочерняя функция. Тем не менее, все еще можно назвать базовую версию (например, из дочерней версии) как Father::print()
, если дано определение для этой функции.
Но это не может, и вот где я застреваю.
Я не знаю, что вы подразумеваете под этим.
Других решений пока нет …