Как правильно передать строку через несколько дочерних конструкторов родительскому. C ++ - PullRequest
0 голосов
/ 05 ноября 2018

Я студент колледжа в моем первом классе C ++. Я нуждаюсь в некоторой помощи для текущей домашней работы.

Цель, которую я пытаюсь достичь, состоит в том, чтобы создать новый объект (Rabbit) и передать имя 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 оттуда. В заголовках Mammal и Animal у меня есть это:

#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 голосов
/ 05 ноября 2018
string pete; 

Это вызывает конструктор string по умолчанию и создает пустую строку. Теперь у вас есть пустая строка в переменной pete.

Rabbit* RabbitP = new Rabbit(pete);

Это создает нового Кролика, вызывающего конструктор и пропускающего пустую строку. Вы должны ожидать, что имя в Animal будет установлено на "".

Если вы хотите, чтобы имя было «Пит», назовите его и передайте строку «Пит». Если вы не используете указатели (которые здесь, похоже, вам не нужны), они бы выглядели так:

Rabbit RabbitP("Pete");
...