【发布时间】:2015-07-08 17:54:54
【问题描述】:
关于使用指向对象的指针定义对象的简单示例。我们定义一个对象A *a = new A(123.4);,然后用A *b = new A(*a);定义另一个对象
我不明白这对 b(pointer to) 对象究竟是如何工作的?复制构造函数如何在此处启动并将值初始化为与对象 a 相同?我认为要让它工作,我们应该在类中声明一个自定义的复制构造函数。
#include <iostream>
using namespace std;
class A {
public:
A(float v) { A::v = v; }
float v;
float set(float v) {
A::v = v;
return v;
}
float get(float v) {
return A::v;
}
};
int main() {
A *a = new A(123.4);
A *b = new A(*a);
cout << a->v << endl;
cout << b->v << endl;
a->v = 0.0;
cout << a->v << endl;
cout << b->v << endl;
b->v = 1.0;
cout << a->v << endl;
cout << b->v << endl;
return 0;
}
程序的输出是:
123.4
123.4
0
123.4
0
1
提前致谢。
【问题讨论】:
-
编译器为你生成了一个拷贝构造函数。它将执行成员变量的浅拷贝,这在您的情况下已经足够了。
-
每个类都有一个拷贝构造函数,不管你是否自己定义。
-
@KerrekSB 如果 AndyG 的回答和他回答下面的评论是正确的,那么你所说的不是真的......或者我误解了一些东西
-
@tobi303:这取决于你想变得多么迂腐。总是声明一个复制构造函数(这就是我说“有”时的意思)。如果不是用户定义的,则在首次使用odr时隐式定义,可能定义为删除。
标签: c++ object polymorphism