2013-05-26 4 views
-6

У меня есть 3 класса с использованием шаблонов и 2 из абстрактного базового класса. В моем main() я применяю концепции полиморфизма, но из указателя в базовый класс объекты производного класса не инициализируются. Я не уверен, где проблема в моем коде.Templated polymorphism не работает

#include<iostream> 
#include<conio.h> 
using namespace std; 

template<class T> 
class polygon 
{ 
protected: 
    T a,b; 
public: 
    virtual T area()=0 
} 

template<class T> 
class rectangle:public polygon 
{ 

public: 
    rectangle(T c,T d) 
    { 
     a=c; 
     b=d; 
    } 
    T area() 
    { 
     return (a*b); 
    } 
}; 

template<class T> 
class triangle:public polygon 
{ 

public: 
    rectangle(T c,T d) 
    { 
     a=c; 
     b=d; 
    } 
    T area() 
    { 
     return (.5*a*b); 
    } 
}; 

template<class T> 
class rectangle 
{ 

public: 
    rectangle(T c,T d) 
    { 
     a=c; 
     b=d; 
    } 
    T area() 
    { 
     return (a*b); 
    } 
}; 
void main (void) 
{ 

polygon<float>*ppoly=new rectangle<float>(4,5); 
cout<<ppoly->area(); 
getche(); 

} 
+0

Ваш код не должен компилироваться. Можете ли вы исправить это и объяснить, какие у вас проблемы? – juanchopanza

+0

также основной problm является то, что от указателя базового класса он не инициализирует объект производного класса , как он обычно делает без шаблонов это имеет ничего общего с шаблонами или у меня есть некоторый problm в синтаксисе PLZZ игнорировать осуществление часть. это не моя проблема ri8 –

+0

Не знаю, потому что код, который вы отправили, даже не компилируется. Таким образом, вы используете другой код. Как мы должны знать, что не так с кодом, который вы не показываете? – juanchopanza

ответ

0

Основной вопрос вы должны наследовать класс шаблона таким образом:

template<class T> 
class rectangle : public polygon<T> // polygon is a template, you need to make 
           ^^^ // rectangle from a concrete polygon type 
+0

хорошо спасибо, что он работает –

0

Другое дело: у вас есть 2 определения класса прямоугольника. Один, наследующий от полигона, а другой - нет.