простое генеалогическое дерево в с ++ с использованием указателей

Я пытаюсь создать простое семейное дерево в C ++, используя указатели для ввода строк для имен, которые затем постепенно сохраняются в коде.

Например, программа запускается в неизвестном месте, и пользователю предлагается ввести имя для текущего места, перейти к месту отца, перейти к месту мамы или вернуться к начальному человеку (зарегистрировано первым человеком) , Вот что у меня так далеко:

#include <iostream>
#include <cstdlib>
using namespace std;

class person
{
public:
person* mom;
person* dad;
string name;
person();
~person();
person(string n);
};person::person()
{
mom = nullptr;
dad = nullptr;
name = "Unknown";
}

person::~person()
{
//delete any dynamic memory if needed
}

person::person(string n)
{
name = n;
}

int main()
{
string inputName;
person current;
person *pointer; //I know I'll probably need to use a class pointer
//in some manner to keep track of the current pointer, but how?
//also, how to turn private variables in person into public
//while still being able to use them indirectly in main, if possible?

char choice;
do {
cout << "You are currently at: " << current.name << endl;
cout << "Your mom is: ";
if(current.mom == nullptr)
{
cout << "???" << endl;
}
else
{
cout << current.mom;
}
cout << "Your dad is: ";
if(current.dad == nullptr)
{
cout << "???" << endl;
}
else
{
cout << current.dad;
}
cout << "Give name, go to mom, go to dad, back to start, or quit?" << endl;
cin >> choice;

if (choice == 'g')
{
cout << "What name (single word)?" << endl;
cin >> inputName;
current.name = inputName;
}
else if (choice == 'm')
{
//go to mom spot
}
else if (choice == 'd')
{
//go to dad spot
}
else if (choice == 'b')
{
//go to first registered name
}
}
while (choice == 'g' || choice == 'm' || choice == 'd' || choice == 'b');
//else quit
return 0;
}

Мой код в настоящее время довольно неаккуратный, так как я начинающий C ++ и только начал неделю назад самостоятельно. Я знаю, что публичные переменные — это действительно плохая практика, но я не знаю, как использовать закрытые переменные в main. Будем весьма благодарны за любую помощь в том, как организовать мои указатели или как заставить работать частные переменные внутри main.

0

Решение

Вы правильно объявили и определили общедоступных членов вашего класса, чтобы реализовать частные, вам не нужно слишком много менять.

В соответствии с определением вашего класса, вам просто нужно включить раздел «private:». Здесь вы объявляете свои закрытые переменные или функции, а методы получения и установки этих переменных — в общедоступном заголовке.

Так что ваши

class person
{
public:
person* mom;
person* dad;
string name;
person();
~person();
person(string n);
};

становится

class person
{
public:
person();
~person();
person(string n);

void setName(string);

person* getMom();
person* getDad();
string getName();
private:
person* mom;
person* dad;
string name;
};

Обратите внимание, что при объявлении функции вам не нужно указывать имя каких-либо переменных параметров. Это совершенно необязательно; компилятору нужно только знать, какой тип переменной ожидать.

Затем, так же, как вы определили свои конструкторы и деструктор, вы определяете только что объявленные методы получения и установки.

...
person::person(string n)
{
name = n;
}

void person::setName(string name)
{
this->name = name;
}

person* person::getMom()
{
return mom;
}

person* person::getDad()
{
return dad;
}

string person::getName()
{
return name;
}

int main()
...

Это форматирование практически такое же, как если бы вы разделяли класс Person на его собственные файлы заголовков (.h) и cpp (.cpp).

Затем, чтобы получить доступ к вашим личным пользователям, вам нужно только вызвать получателей или создателей, которые вы только что создали. Так,

cout << "You are currently at: " << current.name << endl;

становится

cout << "You are currently at: " << current.getName() << endl;

Надеюсь, что это имеет смысл.

PS: Если вы используете строковый класс C ++, вы можете #include <string>

pps: Хорошая практика — всегда использовать первую букву любого класса, который вы делаете. Просто так это выделяется. Person вместо person,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]