Виртуальные чистые функции
Я понимаю, что чисто виртуальная функция внутри класса делает этот класс абстрактным. Это означает, что я не могу создавать объекты с этим классом и что я должен переопределить эту виртуальную функцию во всех производных классах.
У меня есть следующий код:
class Forma{
protected:
double x,y;
public:
Forma(double h=0, double v=0);
virtual double Arie() const;
virtual double Perimetru() const=0;
};
class Dreptunghi: public Forma{
public:
Dreptunghi(double h=0, double v=0);
virtual double Arie() const;
virtual double Perimetru() const;
};
class Cerc:public Forma{
protected:
double raza;
public:
Cerc(double h=0, double v=0, double r=0);
virtual double Arie() const;
virtual double Perimetru() const;
};
Forma::Forma(double h,double v){x=h; y=v;}
double Forma::Arie() const{return x*y;}
double Forma::Perimetru() const{return x+y;}
Dreptunghi::Dreptunghi(double h,double v){Forma(h,v);}
double Dreptunghi::Arie() const{return x*y;}
double Dreptunghi::Perimetru() const{return 2*x+2*y;}
Мои ошибки следующие:
33 53 [Error] cannot allocate an object of abstract type 'Forma'
4 7 [Note] because the following virtual functions are pure within 'Forma':
31 9 [Note] virtual double Forma::Perimetru() const
Как я могу это исправить? Спасибо.
1 ответ
Решение
Синтаксис для передачи аргументов в базовый класс выглядит следующим образом:
Dreptunghi::Dreptunghi(double h, double v) : Forma(h, v) {}
То, как вы это написали, вместо этого он попытался бы создать экземпляр Forma
что, конечно, не допускается.