C++ 应在';之前使用主表达式'; #包括 使用std::cout; 使用std::endl; 阶级广场{ 公众: 双倍长度、宽度; 正方形(双倍长,双倍宽); 正方形(); ~square(); 双周长(); }; 双正方形::周长(){ 返回2*square.length+2*square.width; } int main(){ 平方英尺(4.0,4.0); 不能简单地使用 double square::perimeter() { return 2 * length + 2 * width; }

C++ 应在';之前使用主表达式'; #包括 使用std::cout; 使用std::endl; 阶级广场{ 公众: 双倍长度、宽度; 正方形(双倍长,双倍宽); 正方形(); ~square(); 双周长(); }; 双正方形::周长(){ 返回2*square.length+2*square.width; } int main(){ 平方英尺(4.0,4.0); 不能简单地使用 double square::perimeter() { return 2 * length + 2 * width; },c++,class,C++,Class,square是一种类型,不是对象;而不是 return 2*square.length + 2*square.width; 做 (隐式与以下内容相同: return 2*this->length + 2*this->width; return 2*this->square::length + 2*this->square::width; 为了清楚起见,您可以选择,也可以不选择) 如果使用了length和width,则2*square::length+2*square

square
是一种类型,不是对象;而不是

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

(隐式与以下内容相同:

return 2*this->length + 2*this->width;
return 2*this->square::length + 2*this->square::width;
为了清楚起见,您可以选择,也可以不选择)

如果使用了
length
width
,则
2*square::length+2*square::width
将是有效的语法

  • square
    的静态成员,或
  • 某些基类的成员
    square
    ,或
  • 某些命名空间中的对象
    square

要访问实例变量,只需命名它们:

double square::perimeter() {
  return 2*length + 2*width;
}
您需要说
square::permiture()
,因为您正在定义square类本身的方法。您可能希望在特定对象上定义它,但希望它对square的所有实例都可用,因此需要在特定对象上定义它

另一方面,实例变量
length
width
属于类的特定实例,而不是整个类本身(否则您会将它们声明为
static
)。这意味着您可以直接引用它们,而不必遍历类本身,编译器就会知道您所谈论的变量。这是因为
宽度
长度
与方法定义在同一范围内,因此您无需使用
为它提供特殊的说明来告诉它是什么e来找到它要找的东西。因此:

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

是的,准确的形式是:

return 2*square::length + 2*square::width;
因为
square
是一种类型,而不是对象

在这种情况下,它与:

return 2*this->length + 2*this->width;
return 2*this->square::length + 2*this->square::width;
但是,由于它是同一对象和同一类型,您可以只写:

return 2*this->length + 2*this->width;
或者,最简单地说:

此函数中的
square
是什么?square是一个类。您可以使用
操作符从对象访问成员。例如
sq.somefun();

所以周长函数应该是:

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

但是正方形的长度和宽度不是相等的吗?

为什么正方形的
长度和
宽度会不同呢?你可以使用
边。
return 2*length + 2*width;
double square::perimeter() {
return 2*square.length + 2*square.width;
}
 double square::perimeter() {
    return (2*(length + width));
    }