【问题标题】:C++ passing data from object of class A to object of derived class BC ++将数据从A类的对象传递给派生类B的对象
【发布时间】:2021-12-01 18:43:54
【问题描述】:

对于下面的示例代码,我正在尝试将来自类A 的对象的数据传递(或属性,如果它更适合您)到派生类B 的对象。到目前为止我不明白的是如何将数据从父类对象传输到派生类对象。

下面的“代码”表达了我是如何尝试这样做的。

class Foo {
protected:
    string Name, Surname;

public:
    void readData()
    {
        cin >> Name >> Surname >> ;
    }
}

class Bar : public Foo {
public:
    Bar(Foo a)
    {
        Name = Name;
        Surname = Surname;
    }
    void printData()
    {
        //code
    }
}

int
main()
{
    Foo a;
    a.readData();
    Bar b(a);
    b.printData()
}

【问题讨论】:

  • Name = Name; 是“noop”,你是说Name = a.Name;吗?
  • 和更好的Bar (Foo a) : Foo(std::move(a)) {}
  • 嘿@Jarod42,为什么不一直到Bar (const Foo &a) : Foo(a) {}
  • @Jarod42 我已经尝试过使用 a.Name,但它对我说`它不能通过“A”指针或对象访问
  • @ypnos:可能,但在某些情况下会做额外的副本(而不是在所有情况下都额外移动)(在提供一个足够好的重载或几个重载之间也有权衡)。跨度>

标签: c++ class inheritance


【解决方案1】:

使您的代码编译的最小更改是使用Foos 复制构造函数并简单地访问Bar::printData 中的继承成员:

#include <string>
#include <iostream>

class Foo{
 protected:
 std::string Name, Surname;
 public:
 void readData()
 {
  std::cin >> Name >> Surname;
 } 
 };

class Bar : public Foo
{
 public:
 Bar (const Foo& a) : Foo(a) {  }
 void printData()
 {
    std::cout << Name << " " << Surname;
 }
};

int main()
{
 Foo a;
 a.readData();
 Bar b(a);
 b.printData();
}

【讨论】:

  • 嗯,我写它的原因是因为我的任务,更具体地说,我必须照原样使用我的main,但感谢您的帮助!真的很有帮助!
  • @dapet 如果有这样的要求,您应该在问题中提及它们。无论如何,恕我直言,这个任务有点傻。我希望这只是迈向全貌的一步。也许目的是为了说明一个方面(protected?),不知道那是什么,看起来有点傻也就不足为奇了
  • 这个作业与我们刚刚在课程中通过的主题有关,称为继承,我在下面写的code 并不代表整个作业,而只是我'我一直在挣扎
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2020-01-28
  • 2021-04-15
相关资源
最近更新 更多