Вызывается ли когда-нибудь абстрактный метод в c ++? - PullRequest
0 голосов
/ 25 июня 2018

Допустим, у меня есть абстрактный класс с функцией 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;
}

1 Ответ

0 голосов
/ 25 июня 2018

Допустим, у меня есть абстрактный класс с функцией "print". И скажем, у меня есть другой класс, который наследует от класса отца и определяет функцию print. Правильно ли говорить, что функция «классы отца» print никогда не будет вызываться?

номер

Мои споры в случае, когда у меня есть указатель "отца" на "сына". И я вызываю функцию печати, используя этот указатель. Если я не объявил функцию виртуальной, она должна попытаться использовать абстрактную функцию.

Правильно, поэтому, если это не virtual, будет вызвана функция «отец» (или, по крайней мере, будет предпринята попытка сделать это). Это отвечает на ваш предыдущий вопрос.

Если это virtual, переопределение означает, что будет вызвана дочерняя функция. Тем не менее, можно по-прежнему вызывать базовую версию (например, из дочерней версии) как Father::print(), если для этой функции предоставлено определение.

Но не может, и вот где я застрял.

Я не знаю, что вы подразумеваете под этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...