【发布时间】:2017-12-07 07:27:27
【问题描述】:
下面是我的代码:
#include <iostream>
using namespace std;
class Rectangle {
int width, height;
public:
Rectangle(int, int);
int area() { return (width * height); }
};
Rectangle::Rectangle(int a, int b) {
width = a;
height = b;
}
int main() {
Rectangle A(3, 4);
Rectangle B = Rectange(3,4);
return 0;
}
我没有为Rectangle 类定义任何复制构造函数或赋值运算符。
Rectangle B = Rectangle(3, 4); 真的是连续做了三件事吗?
为一个Rectangle的临时变量(我们用
tmp来表示)分配内存空间,调用Rectangle::Rectangle(3, 4)对其进行初始化。为变量
B分配内存空间,用默认构造函数初始化(按成员)使用赋值运算符
Rectangle& operator = (const Rectangle &)将tmp复制到B
这种解释有意义吗?我想我可能理解错了,因为与Rectangle A(3, 4);相比,这个过程看起来非常笨拙和低效。
有人对此有想法吗? Rectangle A(3,4) 是否等同于 Rectangle A = Rectangle(3, 4);?谢谢!
【问题讨论】:
-
@JerryCoffin 感谢您的指正!我混淆了 Java 语法...
标签: c++ class initialization assignment-operator