Я хотел бы показать только ссылку на базовый класс (который может быть абстрактным) в каком-то другом классе, в то время как в этом классе какой из производных типов будет определен во время выполнения. Ниже приведен пример, где этот «некоторый другой класс» является главной функцией. Компилятор говорит, что ссылка должна быть инициализирована, есть ли способ определить ссылку сначала как член класса, а затем инициализировать?
#include <iostream>
#include <string>
using namespace std;
class Base {
public:
double& par;
string model_type;
Base (double ¶m) : par(param) {}
virtual ~Base() {}
virtual void init();
};
void Base::init() {
model_type = "My Model";
}
class Deriv : public Base {
public:
Deriv(double ¶m) : Base(param) {}
void init() override;
private:
};
void Deriv::init() {
model_type = "My Derived Model";
}
int main() {
double a = 0.99;
Base* B;
B = new Base(a);
B->init();
cout << B->model_type << " " << B->par << endl;
a++;
Base* C;
C = new Deriv(a);
C->init();
cout << C->model_type << " " << C->par << endl;
//problematic: reference D needs to be initialized.
a++;
Base& D;
D = Deriv(a);
D.init();
cout << D.model_type << " " << D.par << endl;
return 0;
}