【问题标题】:Synchronized variable in class which are parent and child class类中的同步变量,它们是父类和子类
【发布时间】:2021-06-26 08:01:27
【问题描述】:

参数设置有两个类

class AParameters
{
public:
    AParameters();
    int test1 = 0;
    int test2 = 0;
};
class BParameters : public AParameters
{
public:
    BParameters();
    int test3 = 0;
    int test4 = 0;
};

还有两个类供测试

class A
{
public:
    A();
    void SetParameters(AParameters);
    BParameters GetParameters();

private:
    AParameters a;
};

class B : public A
{
public:
    B();
    void SetParameters(BParameters);
    BParameters GetParameters();
private:
    BParameters b;
};

我想设置A的参数(a),并且可以将值同步到B的参数(b)。

并设置B的参数(b)可以将值同步到A的参数(a)。

例如:

B *myB = new B;
A *mya = myB;
AParameters aa;
aa.test1 = 1;
aa.test2 = 2;
mya->SetParameters(aa);

auto data = myB->GetParameters();

我想看数据的结果是 data.test1 = 1; data.test2 = 2; 不是 data.test1 = 0; data.test2 = 0;

因为BParameters继承了AParameters,有没有办法实现呢?

【问题讨论】:

  • 当然,有很多方法。问题是不同的As 和Bs 之间的关系是什么。如果它们都共享参数,您可以使用static 类成员。如果只是其中一些共享参数,那么该关系商店是如何定义的?
  • @super 对不起,A 和 B 的关系是什么意思?我假设A和B的代码就是这样,B继承A。我想连接B类中的BParameters b和A类中的AParameters a的数据
  • 我只需要得到像“示例”这样的结果。你能尝试实现你的方法吗?
  • 你需要的是解释你想要什么。假设您创建了第二个B。假设一个还与A 和第一个B 共享参数?
  • 哦,等等。只有一个例子。误读了你的例子。那么为什么它们有不同的参数类呢?似乎你可以在A 中添加一个BParameters 并完成它?

标签: c++ pointers inheritance


【解决方案1】:

这是处理它的一种方法。

#include <memory>

class AParameters
{
public:
    AParameters();
    int test1 = 0;
    int test2 = 0;
};

class BParameters : public AParameters
{
public:
    BParameters();
    int test3 = 0;
    int test4 = 0;
};

class A
{
public:
    A() : a(std::make_unique<AParameters>()) {}
    A(std::unique_ptr<AParameters> params) : a(std::move(params)) {}
    void SetParameters(AParameters);
    AParameters GetParameters();

private:
    std::unique_ptr<AParameters> a;
};

class B : public A
{
public:
    B() : A(std::make_unique<BParameters>()) {}
    void SetParameters(BParameters);
    BParameters GetParameters();
};

说实话,我不太喜欢整体设计。但是从您的问题中,您实际上想要实现的目标并不是很清楚,所以这里是“让它工作”的例子。

【讨论】:

  • 感谢您的回复。我稍后会尝试。事实上,我想为 3D 相机设计一个具有三个层次的图案。第一级是“相机”,第二级是“面阵相机”或“线阵相机”,“面阵相机”下的第三级是类似于“kinect”或其他不同相机品牌的产品; “线阵相机”下的第三层是产品的一些线阵相机品牌。三级继承二,二继承一。因此,例如,如果我的程序使用区域扫描相机,那么当我更改相机产品时,大部分代码都可以相同。
  • 或者如果我想写一个程序来做基本的扫描而不知道会使用蚂蚁类型的相机。我可以使用一级类进行基本扫描,不必关心将使用哪种相机。不知道这样的叙述能不能让你明白我的目的。谢谢。
  • 在一级类中设置基本参数时,可以使用二级指针获取基本参数。其他的,当我在level 2的calss中设置基本参数和高级参数时,可以使用level 1的指针来获取基本参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
相关资源
最近更新 更多