访问实例化类的变量

Accessing Variable of an Instanced Class

本文关键字:变量 实例化 访问      更新时间:2023-10-16

首先,我为不好的标题命名感道歉。我不知道如何正确地表达它。

我的问题是,我有四个给定的类,为了简单起见,我称它们为ABCD

  • CCD_ 5是一个包含大量数据的大类
  • CCD_ 6基本上是一个包含许多CCD_
  • B是一个单例,并为A提供一个实例。B有一个成员C* c
  • CCD_ 12包含一个方法,该方法调用CCD_

我想测试D中是否存储了正确的信息,并通过A传递给程序。

下面是我的代码的简化版本,说明了设置。

#include <stdexcept>
#include <string>
#include <vector>

class D {
public:
    // Greatly simplified; this class holds much more data in reality.
    std::string info {};
};

class C {
private:
    std::vector<D*> d {};
public:
    D* getD(int dNum) {
        return this->d.at(dNum);
    }
};

class B {
private:
    C* c {};
    D* d {};
    B() {
        this->c = new C();
    }
    ~B() {
        delete this->c;
    }
    B(const B&) = delete;
    B& operator=(const B&) = delete;
public:
    static B* getInstance() {
        static B instance {};  // singleton
        return &instance;
    }
    bool doSomething(const std::string& text) {
        int dNum = std::stoi(text);  // simplified
        try {
            this->d = this->c->getD(dNum);
            this->d->info += text;
            return true;
        } catch (const std::out_of_range&) {
            return false;
        }
    }
};

class A {
public:
    bool someFunction(const std::string& text) {
        return B::getInstance()->doSomething(text);
    }
};

我的测试应该是这样的。

void test() {
    std::string testString {"1"};
    A a {};
    a.someFunction(testString);
    // How can I test that for the 'D' object 'd', that was manipulated by the
    // call to 'someFunction', 'd.info == testString'?
}

我看过存根和mock,但我不知道如何在这种情况下使用它们(实际上我从未使用过它们)。

如果我的解释不清楚,我再次表示歉意。我在C++方面很弱,因此不知道如何解释。因此,即使搜索类似的问题也被证明是不可能的,所以如果以前有人问过这个问题,我很抱歉。

编辑:我知道我可以通过在B中实现一些getter方法来获得C来实现这一点,但我希望有另一种方法。

您还没有显示是否将内存分配给类指针。在a->someFunction(testString);中,a指向哪里?那么,在class BneededD = c->getD(dNum);中,c指向哪里?此外,必须将行requiredD = d->at(dNum);更改为requiredD = d.at(dNum);。请提供完整的详细信息以更好地理解问题。