c++ - 试图理解 C++ 类之间的组合

标签 c++ class constructor composition

我很难理解如何正确执行 C++ 类之间的组合。这是我遇到困难的示例:

#include <iostream>

using namespace std;

class Super
{
private:
    int idNum;
    string Name;
public:
    Super(int, string);
    void setSuper();
};

Super::Super(const int id, const string superName)
{
    idNum = id;
    Name = superName;
}

class Sidekick
{
private:
    int sideIdNum;
    string sideName;
    Super hero;
public:
    Sidekick(int, string, Super);
    void setSidekick();
};

int main()
{
    Super sm;
    Sidekick sk;

    sm.setSuper();
    sk.setSidekick();

    return 0;
}

void Super::setSuper()
{
    int superID;
    string sname;

    cin >> superID;
    cin >> sname;

    Super(superID, sname);
}

void Sidekick::setSidekick()
{
    int id;
    string siName;
    Super man;

    cin >> id;
    cin >> siName;
    //How do I perform action that automatically obtains the attributes 
    //from the object "hero" from Super?
}

最佳答案

要从 Super 类获取属性,您需要提供 getter 助手。下面是一个例子:

using namespace std;

class Super
{
private:
    int idNum;
    string Name;
public:
    Super(int, string);
    void setSuper();
    int getId() {return idNum;}   // added here
    string getName() {return Name;} // added here
};

...

void Sidekick::setSidekick()
{
    int id;
    string siName;
    Super man;

    cin >> id;
    cin >> siName;
    //How do I perform action that automatically obtains the attributes 
    //from the object "hero" from Super?

    // Use yours helper here
    cout << hero.getId();
    cout << hero.getName();
}

顺便说一句,您不能像以前那样调用构造函数。您至少有两个选择,要么在创建对象时设置属性,要么提供 setter 助手来执行此操作。

关于c++ - 试图理解 C++ 类之间的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16577980/

相关文章:

C++ - 如何在字符串中查找(可变)字符?

C++ 类对非类型模板参数的部分特化

ios - Swift:协议(protocol) vs. 结构 vs. 类

class - 如何使用 OCaml 中的类类型强制类中的 val 在类中不可变

java - 我们应该在一个类中总是有一个零参数的构造函数吗?

C++:为什么我的 DerivedClass 的构造函数无法访问 BaseClass 的 protected 字段?

c++ - 在多级继承的情况下无法理解虚拟基类构造函数

c++ - 在命名空间中使用全局命名空间中的函数

c++ - 在cpp中围绕原点旋转一个点?

c++ - opengl如何知道有多少个顶点?