子類別運用祖類別的問題.... |
尚未結案
|
SuperChris
一般會員 發表:1 回覆:1 積分:0 註冊:2008-01-31 發送簡訊給我 |
程式目的: cSquare是正方形 cRectangle繼承了cSquare成為長方形 而我自己設計一個ct3繼承了cRectangle 但孫類別無法直接呼叫祖類別(cSquare)的建構子 在這行:ct3(double wide):cSquare(len),width(wide){ } 會有以下的錯誤: Error 1 error C2512: 'cRectangle' : no appropriate default constructor available Error 2 error C2614: 'ct3' : illegal member initialization: 'cSquare' is not a base or member 請問要如何解決呢? #include #include using class cSquare { double length; double len) { length = len; } const { virtual const { double getArea() return getLength() * getWidth(); } }; public cSquare { double width; double len, double getWidth() return width; } }; public cRectangle { double width; double len, virtual const { int main() { "Square length = "<< square.getLength() << " and area = " << square.getArea() << "Rectangle length = "<< rectangle.getLength() << " width = "< }
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
原先所舉用的class 之間差異性太小,
以下程式碼稍做修改, 新增 abstract base class cShape, 以及一個descendant class cTriangle, 謹供參考 [code cpp] //--------------------------------------------------------------------------- #pragma hdrstop #include //--------------------------------------------------------------------------- #pragma argsused class cShape { public: virtual double getArea() = 0; }; class cTriangle: cShape { protected: double height; double length; public: cTriangle(double Length, double Height) { length = Length; height = Height; } double getLength() { return length; } double getHeight() { return height; } double getArea() { return getLength() * getHeight() / 2.0f; } }; class cSquare: cShape { protected: double length; double width; public: cSquare(double Length, double Width) { length = Length; width = Width; } double getLength() { return length; } double getWidth() { return width; } double getArea() { return getLength() * getWidth(); } }; class cRectangle : public cSquare { public: cRectangle(double Length, double Width): cSquare(Length, Width){} }; class ct3: public cRectangle { public: ct3(double Length, double Width): cRectangle(Length, Width){} }; int main(int argc, char* argv[]) { int x; cTriangle *triangle = new cTriangle(10,10); cSquare *square = new cSquare(10,10); cRectangle *rectangle = new cRectangle(15,12); ct3 *ct33 = new ct3(20,21); cout<< "Triangle length = " << triangle->getLength() << "\n" << "Triangle height = " << triangle->getHeight() << "\n" << "Triangle area = " << triangle->getArea() << "\n\n"; cout<< "Square length = " << square->getLength() << "\n" << "Square width = " << square->getWidth() << "\n" << "Square area = " << square->getArea() << "\n\n"; cout<< "Rectangle length = " << rectangle->getLength() << "\n" << "Rectangle width = " << rectangle->getWidth() << "\n" << "Rectangle area = " << rectangle->getArea() << "\n\n" ; cout<< "ct33 length = " << ct33->getLength() << "\n" << "ct33 width = " << ct33->getWidth() << "\n" << "ct33 area = " << ct33->getArea() << "\n\n"; delete triangle; delete square; delete rectangle; delete ct33; cin >> x; return 0; } //--------------------------------------------------------------------------- [/code] |
SuperChris
一般會員 發表:1 回覆:1 積分:0 註冊:2008-01-31 發送簡訊給我 |
謝謝你的回覆,我後來改code下以下這樣:
目前還是有個問題... 在新增class,是不是都一定要設定 double width; 才可以讓這個class使用呢? 是否可以不用在申告width,然後根據之前父、祖類別 直接繼承給孫類別使用 謝謝大家的觀看 #include "stdafx.h" #include using namespace std; class cSquare { protected: double length; public: cSquare(double len) { length = len; } double getLength() const { return length; } virtual double getWidth() const { return length; } double getArea() const { return getLength() * getWidth(); } }; class cRectangle : public cSquare { protected: double width; public: cRectangle(double len, double wide):cSquare(len) { width = wide; } double getWidth() const { return width; } }; class ct3: public cRectangle { protected: double width; public: ct3(double len, double wide):cRectangle(len,wide) { width = wide; } virtual double getWidth() const { return width; } }; int main() { int x; cSquare square(10); cRectangle rectangle(15,12); ct3 ct33(20,21); cout<<"Square length = "<< square.getLength() << "\n" <<" and area = " << square.getArea() << "\n"; cout<< "Rectangle length = "<< rectangle.getLength() << "\n" << " width = "< << " width = "< return 0; } ===================引 用 jow 文 章=================== 原先所舉用的class 之間差異性太小, 以下程式碼稍做修改, 新增 abstract base class cShape, 以及一個descendant class cTriangle, 謹供參考 [code cpp] //--------------------------------------------------------------------------- #pragma hdrstop #include //--------------------------------------------------------------------------- #pragma argsused class cShape { public: virtual double getArea() = 0; }; class cTriangle: cShape { protected: double height; double length; public: cTriangle(double Length, double Height) { length = Length; height = Height; } double getLength() { return length; } double getHeight() { return height; } double getArea() { return getLength() * getHeight() / 2.0f; } }; class cSquare: cShape { protected: double length; double width; public: cSquare(double Length, double Width) { length = Length; width = Width; } double getLength() { return length; } double getWidth() { return width; } double getArea() { return getLength() * getWidth(); } }; class cRectangle : public cSquare { public: cRectangle(double Length, double Width): cSquare(Length, Width){} }; class ct3: public cRectangle { public: ct3(double Length, double Width): cRectangle(Length, Width){} }; int main(int argc, char* argv[]) { int x; cTriangle *triangle = new cTriangle(10,10); cSquare *square = new cSquare(10,10); cRectangle *rectangle = new cRectangle(15,12); ct3 *ct33 = new ct3(20,21); cout<< "Triangle length = " << triangle->getLength() << "\n" << "Triangle height = " << triangle->getHeight() << "\n" << "Triangle area = " << triangle->getArea() << "\n\n"; cout<< "Square length = " << square->getLength() << "\n" << "Square width = " << square->getWidth() << "\n" << "Square area = " << square->getArea() << "\n\n"; cout<< "Rectangle length = " << rectangle->getLength() << "\n" << "Rectangle width = " << rectangle->getWidth() << "\n" << "Rectangle area = " << rectangle->getArea() << "\n\n" ; cout<< "ct33 length = " << ct33->getLength() << "\n" << "ct33 width = " << ct33->getWidth() << "\n" << "ct33 area = " << ct33->getArea() << "\n\n"; delete triangle; delete square; delete rectangle; delete ct33; cin >> x; return 0; } //--------------------------------------------------------------------------- [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |