2011-12-08 72 views
1

您必须明确列出要在复制构造函数中复制的所有成员,这意味着您可以设置复制构造函数以复制对象的剪切版本。成员函数和复制构造函数

但成员函数如何复制工作?是否所有成员函数都自动包含?这是因为一个对象实际上只是成员而功能只是声明一个类可以如何使用?这是否意味着您可以在理论上使用复制构造函数创建减少的对象,然后例如调用getter来获取副本中不存在的成员?

+0

所以你想知道如果你可以创建一个对象的副本,缺少某些成员?或者您想知道是否可以创建缺少某些方法的副本? – Corbin

+0

both(11 more。) – SirYakalot

+0

它不能缺少某些成员。但是这些成员的数据可能会丢失。如果你不复制数据,那么它不在那里。尽管如此,仍然会为该属性分配内存。至于不复制方法,如下所述,这是不可能的。 – Corbin

回答

0

可能存在对C++中的类/对象有误解。在一些语言中(例如python),对象可以改变(新变量/函数)。在C++中,对象是静态的,如类中所指定的,所以不能缩小对象的版本。

默认拷贝构造函数已经做了一个成员拷贝。如果这还不够(浅拷贝< - >深拷贝),则必须提供您自己的拷贝构造函数版本,您必须在其中进行所有拷贝。无法复制成员会将复制的版本保留为未定义或默认成员。最好避免通过避免动态内存和类似的东西来制作自己的拷贝构造函数。

6

成员函数不存储在类实例中。他们只是常规功能。然而,一个vtable指针可以被存储。它用于动态分配虚拟成员函数。

正常成员函数调用是在编译时确定的。

(作为边注,也有某些语言做的每个实例方法店副本,虽然C++是不是其中之一)

4

函数没有为每个实例一个单独的实例; (非静态)成员函数的特性并不是它将为每个实例实例化,而是它必须在实例上调用,并且会隐式地接收到实例的指针。没有功能的复制。 (实际上,功能—成员或其他—不能被复制。)