在c++中是否有一种方法可以使用一个预先存在的对象作为第一个对象的子对象来创建一个对象?
Is there a way to create an object using a pre-existing object as a sub-object of the first in C++?
那么,假设我们有class Parent
和class Offspring
,它们继承自class Parent
。根据我的理解,当我创建一个Offspring
对象时,也创建了一个Parent
对象并与Offspring
对象相关联。问题是,如果我已经创建了一个独立的Parent
对象,我可以将它用作Offspring
对象创建时包含的Parent
对象吗?
。是否有可能不在Offspring
对象中创建新的Parent
对象,而在其位置使用原始的(并且独立的)?只是将原始Parent
对象的数据复制到Offspring
对象中创建的数据显然不是我想要的。
这是可能的。如果Parent有一个move构造函数,那么你可以这样写:
class Offspring : public Parent {
double m_x;
public:
Offspring(Parent && p, double x)
: Parent(std::move(p))
, m_x(x)
{ }
}
我认为这是你在不做一些危险和粗略的事情的情况下所能得到的最接近的结果。虽然这种技术可能无法避免复制Parent的数据,但它可以更有效。例如,如果Parent是std::vector,那么上面的代码将通过从现有vector移动来初始化Offspring的基类。这将只需要移动24字节的数据,而不是向量指向的所有数据。
我想你可能想阅读更多以上的移动语义,看看它如何适合你的类。
我相信你想要的是能够使用多个Offspring
的现有Parent
实例。我之所以这么说,是因为你似乎在担心抄袭,而这通常是无关紧要的。
您可以将Parent
定义为一个纯接口,并将接口本身的实现定义为一个独立的父接口。
struct Parent {
virtual ~Parent () = default;
virtual void foo () = 0;
//...
};
class Mother : public Parent {
public:
void foo () { /* ... */ }
//...
};
然后,您的Offspring
可以接受Parent
来委托实现。
class Offspring : public Parent {
Parent &p_;
public:
Offspring (Parent &p) : p_(p) {}
void foo () { p_.foo(); }
//...
};
现在,一个Mother
可以是多个Offspring
的父节点。
Mother m;
Offspring o1(m);
Offspring o2(m);
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 从多个源构造一个对象,包括一个对象向量
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 包装一个对象并假装它是一个 int
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 如何使用函数将一个对象的输入复制到另一个对象中
- 选择一个元素而不是一个对象的数组的原因
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 打印对象的映射,其中另一个对象作为键
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 绘制一个对象,比较模具缓冲区的两个不同值