Я пытаюсь реализовать полиморфизм с шаблоном производного класса. См. Ниже:Чистые виртуальные функции с шаблонным наследованием
//templated base class
template <class num> class A{
protected:
num x;
num y;
public:
A(num x0 = 0, num y0 = 0) {
x = x0;
y = y0;
}
virtual void print_self() = 0;
};
//derived class
template < class num > class B: public A <num> {
public:
B(num x1 = 0, num y1 = 0):shape <num> (x1 , y1) { }
void print_self(){
std::cout << "x is " << x << " and y is " << y << endl;
}
};
Базовый класс имеет чистую виртуальную функцию print_self(). При попытке определить функцию в производном классе я получил следующую ошибку:
'x' was not declared in this scope
То же самое для y. Итак, так или иначе производный класс не имеет доступа к переменным x и y, хотя он указан как защищенный.
Есть ли другой способ определить print_self(), или это просто невозможно? Если это невозможно, можете ли вы предложить другой подход?
Используйте 'this-> x' и' this-> y'. – skypjack
Использование 'this' здесь избыточно. – Raindrop7
Вы также можете использовать 'A :: x' и' A :: y' или 'typedef A base', а затем' base :: x' и т. Д. –
DeiDei