类成员是需要构造函数的对象.它需要一个函数来实例化
C++ Class member is an object that requires a constructor... which requires a function to instantiate
我问的问题出现了很多次,但对我来说不够具体。在我的例子中,我有一个类(我们叫它C0),它有一个成员,这个成员是一个类(叫它C1),它需要构造函数。然而,在我的例子中,我想在将变量传递给C1的构造函数之前做一些处理。有办法做到这一点吗?从本质上讲,我想实现这样的东西:(当然不工作)
class C0{
public:
C0(){
ComplexDataType data;
//Do some process with data
myC1(data);
}
private:
C1 myC1;
};
class C1{
public:
C1(ComplexDataType data);
}
我已经看到了这里的初始化列表,但我唯一的想法是如何做它会导致一个非常丑陋的初始化列表,就像这样:(这工作)
class C0{
public:
C0() : variable1(doSomething1), variable2(doAnotherThing), variable3(keepItWorking), data(finallyDoSomethingWithTheOtherVariables), c1(data)
{
//Something
};
class C1{
//Stuff
};
是否有一种优雅的方式来实现我的愿望?
更新哦,对了,我忘了说:我不能更改class C1
如果我理解正确的话,看起来您想做一些处理,然后使用初始化列表初始化您的类成员。
可以使用静态成员来实现这一点,如下所示:
class C0{
public:
C0(): myC1(process()){
//Do some process with data
}
private:
C1 myC1;
static ComplexDataType process()
{
ComplexDataType data;
// ... do stuff
return data ;
}
};
我看到了几个解决这个问题的方法
可以在C0中保存指向myC1的指针。然后在C0的c'tor中,你可以处理你的数据,然后设置myC1 = new myC1(data);
class C0 {
public:
C0() {
ComplexDataType data;
//Do some process with data
myC1 = new C1(data);
}
private:
C1 *myC1;
};
或者,如果有意义的话,您可以添加一个新类,它将在其c'tor中完成初步工作,并在C0中的myC1之前声明它(从而创建它),然后在创建时将其结果(使用get方法)传递给myC1。
class DataConfiguration {
public:
DataConfiguration() {
//Do some process with data
}
const ComplexDataType &getData() {
return data;
}
private:
ComplexDataType data;
};
class C0 {
public:
C0() :
dataConf(),
myC1(dataConf.getData()) {
}
private:
DataConfiguration dataConf;
C1 myC1;
};
您可以为C1
实现复制赋值运算符(无论如何您可能应该这样做),并且在C0
构造函数中只需执行例如myC1 = C1(data);
。
我猜你不能修改C1
类,所以你应该认真考虑使用指针。你甚至可以使用shared_ptr
来忘记在你不再需要这个对象时释放内存。
class C0{
public:
C0(){
ComplexDataType data;
//Do some process with data
myC1 = std::make_shared<C1>(data);
}
private:
std::shared_ptr<C1> myC1;
};
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何仅为一个函数添加延迟
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 我需要将多个函数组合为一个函数
- 在C++中声明一个函数时,它需要有函数本身的参数吗
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 将 N-arg 函数包装到另一个函数中
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- C++从另一个函数退出函数
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- 视觉我希望一个函数在另一个函数C++中进行计算
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 在另一个函数 (c++) 中调用变量
- 如何在另一个函数中使用返回值作为参数?
- 如何包装一个函数以适应另一个函数的所需类型
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针