我使用变量的用户输入创建对象时遇到了一些障碍。基本上,程序确定用户想要什么类型的对象,创建它,然后询问用户是否想要添加另一个对象。在此示例中,对象是一个manager,它是employee的子类。
void add_manager()
{
string name;
//Performs a bunch of checks to ensure the input is valid.
name = get_string_input("Please input the name of the employee.");
//Creates a manager object.
manager manager1(name);
//Goes back to previous function, restarts process of finding out employee type.
ask_employee();
}
我将在其他地方存储动态数组中每个对象的指针。数组的目的只是从每个对象中获取值以用于某些打印输出,因此我希望只是遍历数组,获取每个对象的值,然后打印。 (粗略的例子)
我不确定的部分是如何更改对象构造函数调用,以便将对象设置为manager1,manager2等。由于用户想要的内容,将会有不同的编号,我希望保留他们以某种方式来区分它们。
由于我将通过指针访问对象,对象名称是否需要不同?或者对象和指针都可以具有相同的名称?
答案 0 :(得分:2)
由于经理对象可以是无限数,因此您无法将它们全部命名。 C ++是一种静态类型语言。您需要将管理器对象保持在类似数组的结构中:
std::vector<manager *> vManagers;
void add_manager()
{
string name;
//Performs a bunch of checks to ensure the input is valid.
name = get_string_input("Please input the name of the employee.");
//Creates a manager object.
vManagers.push_back(new manager(name));
//Goes back to previous function, restarts process of finding out employee type.
while(ask_employee()
{
name = get_string_input("Please input the name of the employee.");
vManagers.push_back(new manager(name));
}
}
因此,当您需要经理对象时,您可以致电:
vManagers[n]->GetData();
但请注意,您需要在apppriate位置删除管理器对象指针以避免泄漏:
delete vManagers[n];
vManagers[n] = NULL;
答案 1 :(得分:1)
对象名称是否需要不同?
他们不需要与众不同,当您将它们存储在数组中时,对象与其名称之间没有任何联系,例如:它们可以使用manager1
1 进行实例化。 (此外,您无法使用其名称进行搜索。)
对象的区别在于其数据成员的值。因此,如果要搜索对象,请将对象id
或name
定义为数据成员,然后您可以在搜索条件中使用它来查找特定的manager
。
创建对象计数器的一种方法是定义数据成员:
static int counter = 0;
。然后在构造函数中递增counter
以反映对象实例化并在析构函数中递减它。
如果要存储对象,最好使用vector<object_type> container_name
(而不是数组)。要执行此操作,您需要在要存储的对象外部定义矢量。如果存储指向object_type
类型的指针,您可以执行以下操作:
vector<object_type*> container_name;
object_type* ObjectInstance = new object_type(parameters);
// store in vector
container_name.emplace_back(ObjectInstance);
1.只有在编译时,当您将源代码转换为可执行文件时,程序才能使用您提供变量的名称。之后,当您想要创建对象时,这些类型的信息将不再可用。程序只知道机器指令操作数所在的机器地址。