關於這個程式碼的運作有些疑問(C++) [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



關於這個程式碼的運作有些疑問(C++)
會員一級
註冊日期:
2013/2/16 19:40
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 5
MP : 1 / 110
EXP: 21
離線
關於這個程式碼的運作有些疑問,請大家看這段程式碼:

#include<iostream>
#include<vector>
using namespace std;
class Component {
public:
virtual int area()=0;
};
class Shape : public Component {
public:
virtual int area()=0;
};
class Picture : public Component {
private:
vector <Component*> coms;
public:
void add(Component* c);
int area();
};
void Picture::add(Component* c){
coms.push_back(c);
}
int Picture::area(){
int total=0;
for(int i=0;i<coms.size();i++){
total+=coms[i]->area();
}
return total;
}
class Rectangle : public Shape {
private:
int length;
int width;
public:
Rectangle(int l,int w){
length=l;
width=w;
}
int area(){return length*width;}
};
class Triangle : public Shape{
private:
int base;
int height;
public:
Triangle(int b,int h){
base=b;
height=h;
}
int area() {return (base*height/2);}
};
int main(){
int shapeCode[]={2,1,2};
int data[][2]={{2,3},{2,4},{2,5}};
Shape *shape[3];
Picture *p[3];
for(int i=0;i<3;i++) p[i]=new Picture();
for(int i=0;i<3;i++){
if(shapeCode[i]==1)
shape[i]=new Rectangle(data[i][0],data[i][1]);
else
shape[i]=new Triangle(data[i][0],data[i][1]);
p[i]->add(shape[i]);
}
cout << shape[0]->area() << endl;
cout << shape[1]->area() << endl;
cout << shape[2]->area() << endl;
p[0]->add(p[1]);
p[1]->add(p[2]);
cout << p[0]->area() << endl;
cout << p[1]->area() << endl;
cout << p[2]->area() << endl;

system("PAUSE");
return 0;
}

最後得到的輸出是:3
8
5
16
13
5

我比較看不懂的是p[0]->add(p[1]);
p[1]->add(p[2]);
請問這兩行代表什麼意思????為什麼倒數二三個輸出是16和13呢???
懇求高手解答^^

2013/2/16 19:43
應用擴展 工具箱
回覆: 關於這個程式碼的運作有些疑問(C++)
會員一級
註冊日期:
2013/1/31 9:01
所屬群組:
已註冊使用者
等級: 3
HP : 0 / 60
MP : 7 / 1232
EXP: 41
離線
我不懂C++,但我覺得這PO到一些有關於程式設計的論壇應該比較有人能解答吧,畢竟會linux的人不一定要會寫程式,而且system("PAUSE");好像是Windows下的用法耶...

2013/2/16 20:27
應用擴展 工具箱
回覆: 關於這個程式碼的運作有些疑問(C++)
管理員
註冊日期:
2012/1/14 18:41
所屬群組:
討論區管理群
等級: 20
HP : 0 / 480
MP : 159 / 11276
EXP: 23
離線
jejang0002 寫到:
關於這個程式碼的運作有些疑問,請大家看這段程式碼:

#include<iostream>
#include<vector>
using namespace std;
class Component {
public:
virtual int area()=0;
};
class Shape : public Component {
public:
virtual int area()=0;
};
class Picture : public Component {
private:
vector <Component*> coms;
public:
void add(Component* c);
int area();
};
void Picture::add(Component* c){
coms.push_back(c);
}
int Picture::area(){
int total=0;
for(int i=0;i<coms.size();i++){
total+=coms[i]->area();
}
return total;
}
class Rectangle : public Shape {
private:
int length;
int width;
public:
Rectangle(int l,int w){
length=l;
width=w;
}
int area(){return length*width;}
};
class Triangle : public Shape{
private:
int base;
int height;
public:
Triangle(int b,int h){
base=b;
height=h;
}
int area() {return (base*height/2);}
};
int main(){
int shapeCode[]={2,1,2};
int data[][2]={{2,3},{2,4},{2,5}};
Shape *shape[3];
Picture *p[3];
for(int i=0;i<3;i++) p[i]=new Picture();
for(int i=0;i<3;i++){
if(shapeCode[i]==1)
shape[i]=new Rectangle(data[i][0],data[i][1]);
else
shape[i]=new Triangle(data[i][0],data[i][1]);
p[i]->add(shape[i]);
}
cout << shape[0]->area() << endl;
cout << shape[1]->area() << endl;
cout << shape[2]->area() << endl;
p[0]->add(p[1]);
p[1]->add(p[2]);
cout << p[0]->area() << endl;
cout << p[1]->area() << endl;
cout << p[2]->area() << endl;

system("PAUSE");
return 0;
}

最後得到的輸出是:3
8
5
16
13
5

我比較看不懂的是p[0]->add(p[1]);
p[1]->add(p[2]);
請問這兩行代表什麼意思????為什麼倒數二三個輸出是16和13呢???
懇求高手解答^^


呼叫p[0]的add的函式,參數傳p[1].
應該是這樣解釋。

2013/2/16 20:41
應用擴展 工具箱
回覆: 關於這個程式碼的運作有些疑問(C++)
會員一級
註冊日期:
2013/2/16 19:40
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 5
MP : 1 / 110
EXP: 21
離線
class Picture : public Component {
private:
vector <Component*> coms;
public:
void add(Component* c);
int area();
};
void Picture::add(Component* c){
coms.push_back(c);
}
int Picture::area(){
int total=0;
for(int i=0;i<coms.size();i++){
total+=coms[i]->area();
}
return total;
}

那這段我也看不懂:total是怎麼計算值的呢?

2013/2/16 20:59
應用擴展 工具箱
回覆: 關於這個程式碼的運作有些疑問(C++)
管理員
註冊日期:
2012/1/14 18:41
所屬群組:
討論區管理群
等級: 20
HP : 0 / 480
MP : 159 / 11276
EXP: 23
離線
jejang0002 寫到:
class Picture : public Component {
private:
vector <Component*> coms;
public:
void add(Component* c);
int area();
};
void Picture::add(Component* c){
coms.push_back(c);
}
int Picture::area(){
int total=0;
for(int i=0;i<coms.size();i++){
total+=coms[i]->area();
}
return total;
}

那這段我也看不懂:total是怎麼計算值的呢?


total = total + (coms[i]->area());

2013/2/16 21:21
應用擴展 工具箱
回覆: 關於這個程式碼的運作有些疑問(C++)
會員一級
註冊日期:
2013/2/16 19:40
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 5
MP : 1 / 110
EXP: 21
離線
我的意思是說cmos的直如取得用已計算total

對不起我問題描述的不太好

2013/2/16 21:24
應用擴展 工具箱
回覆: 關於這個程式碼的運作有些疑問(C++)
管理員
註冊日期:
2012/1/14 18:41
所屬群組:
討論區管理群
等級: 20
HP : 0 / 480
MP : 159 / 11276
EXP: 23
離線
jejang0002 寫到:
我的意思是說cmos的直如取得用已計算total

對不起我問題描述的不太好

coms[i]呼叫area()
把他回傳的數值跟total相加。

2013/2/16 23:20
應用擴展 工具箱
回覆: 關於這個程式碼的運作有些疑問(C++)
會員一級
註冊日期:
2013/2/16 19:40
所屬群組:
已註冊使用者
等級: 1
HP : 0 / 5
MP : 1 / 110
EXP: 21
離線
謝謝^^

3Q~

2013/2/17 9:13
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.