У меня есть проблема с производным классом от абстрактного класса Примера:производный класс конструктор из абстрактного класса
#include <iostream>
using namespace std;
class A
{
protected:
int a,b;
public:
A(): a(0), b(0) {}
A(int na,int nb): a(na), b(nb) {}
virtual void print() = 0; // Reason to be an abstract class
};
class B : public A
{
public:
B(int a, int b) {A(a,b);}
void print()
{
cout << a << endl;
cout << b << endl;
}
};
int main(){
B clase(3,2);
clase.print();
return 0;
}
Приведенных выше код дать мне ошибку, как это:
lab1.cpp: In constructor ‘B::B(int, int)’:
lab1.cpp:20:10: error: invalid cast to abstract class type ‘A’
A(a,b);
^
lab1.cpp:5:7: note: because the following virtual functions are pure within ‘A’:
class A
^
lab1.cpp:12:16: note: virtual void A::print()
virtual void print() = 0;
^
Примечания : Я знаю, как это сделать, конструктор B будет выглядеть так:
B(int a, int b): A(a,b) {}
Но мой реальный вопрос: что, если я хочу вызвать конструктор моего производного класса внутри ветвей (например, вышеприведенный код)? Каков правильный способ вызова абстрактного конструктора внутри ветвей?
Значит, вы хотите позвонить подрядчику без фактического конструирования объекта? Как так ? ... и что более важно, почему? – HazemGomaa
'A (a, b)' означает построить 'A', который является абстрактным, поэтому он терпит неудачу. – songyuanyao
"Что делать, если я хочу вызвать конструктор моего производного класса внутри ветвей? Вы имели в виду вызов конструктора' B' в конструкторе 'B'? – songyuanyao