我试图通过利用指针在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 :(得分:0)
你声明并定义了你的班级&#39;正确的公众成员,实施你不需要改变太多的私人成员。
根据您的班级定义,您只需要包含一个&#34; private:&#34;部分也是如此。您在那里声明您的私有变量或函数,以及公共标题下的这些变量的getter和setter。
所以你的
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;
};
请注意,在声明函数时,您不需要提供任何参数变量的名称。这完全是可选的;编译器只需要知道期望的变量类型。
然后,就像定义构造函数和析构函数一样,定义刚刚声明的getter和setter。
...
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)文件的格式基本相同。
然后,要访问您的私人成员,您只需要调用刚刚创建的getter或setter。所以,
cout << "You are currently at: " << current.name << endl;
变为
cout << "You are currently at: " << current.getName() << endl;
希望这是有道理的。
ps:如果您正在使用C ++的字符串类,您可能需要#include <string>
pps:总是把你正在上课的第一个字母大写的好习惯。就这样它脱颖而出。 Person
代替person
。