2012-03-20 155 views
9
#include <iostream> 
using std::cout; 
using std::endl; 

class square { 

public: 
    double length, width; 

    square(double length, double width); 
    square(); 

    ~square(); 

    double perimeter(); 
}; 

double square::perimeter() { 
return 2*square.length + 2*square.width; 
} 

int main() { 

square sq(4.0, 4.0); 

cout << sq.perimeter() << endl; 

return 0; 
} 

我想寫一個簡單的類程序。我在成員函數'double square :: perimeter()'中得到錯誤'。'之前的預期主要表達式

; .cpp:21:錯誤:預計在'。'之前的主表達式。令牌 .cpp:21:錯誤:在'。'之前預期的主表達式。代幣

這是否意味着我必須使用2 * square :: length + 2 * square :: width?

+7

爲什麼正方形會有不同的「長度」和「寬度」?你可以使用'side'。 – 2012-03-20 21:23:38

回答

19

square是一個類型,而不是一個對象;而不是

return 2*square.length + 2*square.width; 

return 2*length + 2*width; 

(這是隱含的一樣:

return 2*this->length + 2*this->width; 

,你可能或可能不會,更喜歡清晰)。

2*square::length + 2*square::width是,如果lengthwidth

  • square靜態成員,或者一些基類square
  • 成員,或
  • 對象在某些命名空間中有效的語法square
3

只需使用

double square::perimeter() { 
    return 2 * length + 2 * width; 
} 
2

訪問實例變量,只是他們的名字:

double square::perimeter() { 
    return 2*length + 2*width; 
} 
3
double square::perimeter() { 
    return 2*square.length + 2*square.width; 
} 

你需要說square::perimeter(),因爲您所定義的方形類本身的方法。看起來好像你想在一個特定的對象上定義它,但你希望它可以用於所有正方形的實例,所以你需要在特定的對象上定義它。

另一方面,實例變量lengthwidth屬於類的特定實例,而不是整個類本身(否則您將聲明它們爲static)。這意味着你可以直接引用它們而不是通過類本身,編譯器會知道你在說什麼變量。這是因爲widthlength在與方法相同的範圍內定義,因此您不需要給它特別的指示以::告訴它在哪裏可以找到它尋找的東西。因此:

double square::perimeter() { 
    return 2 * length + 2 * width; //will refer to the instance variables automatically 
} 
4

是的,準確的形式是:

return 2*square::length + 2*square::width; 

因爲square是一種類型的,而不是一個對象。

在這種情況下,這是一樣的:

return 2*this->square::length + 2*this->square::width; 

然而,因爲它是相同對象和相同類型,你可以這樣寫:

return 2*this->length + 2*this->width; 

,或者最簡單:

return 2*length + 2*width; 
2
double square::perimeter() { 
return 2*square.length + 2*square.width; 
} 

這個函數中的square是什麼?廣場是一個類。您使用.運算符來訪問對象中的成員。像sq.somefun();

所以你周邊功能應該是:

double square::perimeter() { 
    return (2*(length + width)); 
    } 

但是,這不是廣場相等的長度和寬度是多少?