如何通过多个子构造函数将字符串正确传递给父结构。 C ++

时间:2018-11-05 20:51:18

标签: c++ c++11 c++17

我是第一门C ++课程的大学生。我需要一些有关当前作业的帮助。

我要实现的目标是创建一个新对象(Rabbit),并从Rabbit> Mammal> Animal传递名称pete,以在此处进行私人设置并稍后引用(指针将在以后被引用以打印出名称)。

string pete;
Rabbit* RabbitP = new Rabbit(pete);

我这样拥有Rabbit的头文件:

#include <string>

class Rabbit :
    public Mammal
{
public:
    Rabbit(std::string tempname) : Mammal(tempname){ }
    Rabbit();
    ~Rabbit();

我正在尝试使用初始化列表将Rabbit的名称传递给Mammal,然后从那里传递给Animal。在MammalAnimal标头中,我这样:

#include <string>

class Mammal :
    public Animal
{
public:
    Mammal(std::string tempname) : Animal(tempname) {}
    Mammal();
    ~Mammal();
};

#include <string>

class Animal // BASE
{
private:
    std::string aName;
public:
    Animal(std::string tempname);
    Animal();
    ~Animal();

包含该功能的Animal.cpp是:

#include <iostream>
#include <string>

using namespace std;

Animal::Animal()
{
}

Animal::~Animal()
{
}

Animal::Animal(string tempname)
{
    aName = tempname;
}

void Animal::Breathe()
{
    std::cout << "Takes a deep breath." << std::endl;
}

void Animal::Move()
{
    std::cout << "Jiggle your limbs around" << std::endl;
}

string Animal::GetName(Animal*)
{
    return aName;
}

使用Visual Studio中的调试器,我可以看到它正在正确地向上移动构造函数,但是没有传递任何东西。感觉我在正确的道路上,但是我想念的是什么?

1 个答案:

答案 0 :(得分:2)

string pete; 

这将调用string默认构造函数并创建一个空字符串。现在,变量pete中有一个空字符串。

Rabbit* RabbitP = new Rabbit(pete);

这将创建一个新的Rabbit,调用构造函数并传递一个空字符串。您应该期望将Animal中的名称设置为""

如果您希望名称为“ Pete”,请调用它并传递字符串“ Pete”。如果您不使用指针(在这里看起来不需要),则将如下所示:

Rabbit RabbitP("Pete");