【问题标题】:Creating a public variable from another class (C++)从另一个类创建公共变量 (C++)
【发布时间】:2022-11-14 01:52:07
【问题描述】:

如果你有两个类,a 类和 b 类,你能从 b 类中创建一个类 a 的变量吗?主文件

class A {
    public:
        A() {}
};

class B {
    public:
        B() {
            test = A();
            test.<variable name> = <variable value>;
        }
};

上面的代码只是一个例子。它可能会导致错误。

A类中不存在“变量名”。有没有办法在B类的构造函数中为A类创建这个变量?

【问题讨论】:

  • 不,类声明必须在声明时完成。您必须使用不同的方式来获得此行为。

标签: c++ class oop


【解决方案1】:

不,C++ 不是 Javascript。类型是严格的,在定义类型之后,就无法修改它。

但是,您可以在函数中创建本地类型:

class B {
public:
    B() {
        struct A_extended : A {
            int i;
        };
        auto test = A_extended();
        test.i = 1;
    }
};

【讨论】:

    【解决方案2】:

    您需要的是提供适当的构造函数、成员变量(可能还有 getter)。 或者你需要在a中添加一个setter并使用m_a.set_value(42)

    #include <iostream>
    
    class A
    {
    public:
        // constructor for A with a value. 
        // made explicit to avoid implicit type conversions from int to A
        explicit A(int value) : 
            m_value{ value }
        {
        };
    
        int get_value() const noexcept
        {
            return m_value;
        }
    
    private:
        int m_value;
    };
    
    class B
    {
    public:
        B(int value) :
            m_a{ value } // <-- this will pass value on to the constructor of A
        {
        };
    
        const A& get_A() const noexcept // not good design, for educational purposes only
        {
            return m_a;
        }
    
    private:
        A m_a;
    };
    
    
    int main()
    {
        B b{ 42 };
    
        std::cout << b.get_A().get_value();
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-11
      • 2015-07-26
      • 2020-11-17
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      相关资源
      最近更新 更多