2013-03-17 168 views
0

今天在學校,我們學習了用C++編寫方法/函數的四種方法,但我不確定我理解每種方法的概念以及它們的不同之處。他們都做同樣的事情嗎?第一代碼是類聲明,和第二代碼是類的外部實現:四種用C++編寫方法/函數的方法?

一個)

1) Vector Addition(Vector a); 

2) Vector Vector::Addition(Vector a) 
{ 
    Vector temp = *this; 
    temp.x+=a.x; 
    temp.y+=a.y; 
    return temp; 
} 

B)

1)Vector ConcreteInstanceAddition(Vector a, Vector b); 

2) Vector Vector::ConcreteInstanceAddition(Vector a, Vector b) 
{ 
    Vector temp=*this; 
    temp.x=a.x+b.x; 
    temp.y=a.y+b.y; 
    return temp; 
} 

C)

1) friend Vector NonConcreteInstanceAddition(Vector a, Vector b); 

2) Vector NonConcreteInstanceAddition(Vector a, Vector b) 
{ 
    Vector temp(0,0); 
    temp.x=a.x+b.x; 
    temp.y=a.y+b.y; 
    return temp; 
} 

d)

1) static Vector NonConcreteInstanceAdditionStatic(Vector a, Vector b); 

2) Vector Vector::NonConcreteInstanceAdditionStatic(Vector a, Vector b) 
{ 
    Vector temp(0,0); 
    temp.x=a.x+b.x; 
    temp.y=a.y+b.y; 
    return temp; 
} 

而且這是在主函數中實現:

Vector a(0,0),b(0,0),c(0,0); 

c=a.Addition(b); 
//or 
c.ConcreteInstanceAddition(a,b); 
//or 
c=NonConcreteInstanceAddition(a,b); 
//or 
c=Vector::NonConcreteInstanceAdditionStatic(a,b); 
+0

你的第二個例子不能編譯。這基本上是「靜態」和「朋友」的問題。 – chris 2013-03-17 17:40:29

+0

請詳細解釋一下。對不起,如果這是一個問題。我是一個初學者,所以告訴我,如果一切聽起來很愚蠢或邏輯錯誤:D – A6SE 2013-03-17 17:46:36

回答

1

你忘了一些:
(自由站立,通過參數返回)

void Addition (const Vector& a, const Vector& b, Vector & result) 
{ 
    result.x = a.x + b.x; 
    result.y = a.y + b.y; 
    return; 
} 

main功能:

Addition(a, b, c); 

也有使用const並通過參考傳遞。

回答:
a)成員函數;可以使用沒有this->的類變量。
修改「託管」實例的成員變量。

b)成員函數;不會修改實例變量。

c)有權限訪問類中的方法和變量的獨立函數。

d)靜態成員函數。可以在沒有對象實例的情況下訪問,但不能訪問任何類變量。 (類變量需要實例。)

編輯1: 您還可以通過執行operator+=()operator+()來添加兩個。

編輯2:靜態成員函數的用法

c = Vector::NonConcreteInstanceAdditionStatic(a,b); 

靜態成員函數就像使用一個獨立的功能,但它是一個類的內部,並且必須使用範圍解析操作,::,訪問。

+0

非常感謝。我用第二個這樣的c = c.ConcreteInstanceAddition(a,b);現在它可以工作。但是,我並沒有完全理解第四個功能。請向我展示如何在主要功能中使用它。 – A6SE 2013-03-17 18:04:33

+0

如果此答案有幫助,請檢查它。 – 2013-03-17 18:08:08

相關問題