Виртуальные чистые функции

Я понимаю, что чисто виртуальная функция внутри класса делает этот класс абстрактным. Это означает, что я не могу создавать объекты с этим классом и что я должен переопределить эту виртуальную функцию во всех производных классах.

У меня есть следующий код:

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

Как я могу это исправить? Спасибо.


person Stefan    schedule 25.05.2014    source источник


Ответы (1)


Синтаксис передачи аргументов базовому классу следующий:

Dreptunghi::Dreptunghi(double h, double v) : Forma(h, v) {}

То, как вы это написали, вместо этого попытается создать экземпляр Forma, что, конечно, не разрешено.

person Chris Jester-Young    schedule 25.05.2014