2012-03-20 108 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)); 
    } 

但是,这不是广场相等的长度和宽度是多少?