線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1248
推到 Plurk!
推到 Facebook!

子類別運用祖類別的問題....

尚未結案
SuperChris
一般會員


發表:1
回覆:1
積分:0
註冊:2008-01-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-31 16:46:18 IP:220.128.xxx.xxx 訂閱
程式目的:
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 = "<" area = " <"ct33 length = "<< ct33.getLength() << " width = "<" area = " <return 0;
}
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-02-01 11:59:28 IP:210.66.xxx.xxx 訂閱
原先所舉用的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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-02-01 15:41:17 IP:220.128.xxx.xxx 訂閱
謝謝你的回覆,我後來改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 = "< << " area = " < cout<< "ct33 length = "<< ct33.getLength() << "\n"
<< " width = "< << " area = " < cin >> x;
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]
系統時間:2024-05-07 23:15:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!