2013-05-26 84 views
-6

我有3個使用模板的類,2個來自抽象基類。在我的main()我正在應用多態概念,但從指向基類的指針派生類的對象沒有被初始化。我不確定問題出在我的代碼中。模板化多態不起作用

#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個定義。一個是從多邊形繼承的,另一個不是。