C++ 自动对象创建,如何控制/增加名称?
我在使用用户输入变量创建对象时遇到了一些困难。基本上,程序确定用户想要什么类型的对象,创建它,然后询问用户是否想要添加另一个对象。在本例中,对象是经理,它是employee的子类C++ 自动对象创建,如何控制/增加名称?,c++,arrays,pointers,object,constructor,C++,Arrays,Pointers,Object,Constructor,我在使用用户输入变量创建对象时遇到了一些困难。基本上,程序确定用户想要什么类型的对象,创建它,然后询问用户是否想要添加另一个对象。在本例中,对象是经理,它是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 e
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等。根据用户的需要,将有不同的编号,我希望以某种方式保留它们,以区分不同之处
因为我将通过指针访问对象,所以对象名称是否需要不同?或者对象和指针都可以有相同的名称吗
对象名称是否需要不同
它们不需要不同,当您将它们存储在数组中时,对象和它们的名称之间没有任何连接,例如,它们都可以使用manager1
1进行实例化。(此外,您不能使用其名称进行搜索。)
对象的区别在于其数据成员的值。因此,如果要搜索对象,请将对象id
或name
定义为数据成员,然后可以在搜索条件中使用它来查找特定的管理器
编辑1:
创建对象计数器的一种方法是定义数据成员:
静态整数计数器=0代码>。然后在构造函数中递增计数器
,以反映对象实例化,并在析构函数中递减
编辑2:
如果要存储对象,最好使用向量容器\u name
(而不是数组)。为此,需要在要存储的对象外部定义一个向量。在存储指向typeobject\u type
的指针的情况下,可以执行以下操作:
vector<object_type*> container_name;
object_type* ObjectInstance = new object_type(parameters);
// store in vector
container_name.emplace_back(ObjectInstance);
向量容器\u名称;
对象类型*ObjectInstance=新对象类型(参数);
//矢量存储
容器名称、安放位置、背面(ObjectInstance);
1.只有在编译时,当您将程序从源代码转换为可执行文件时,程序才能使用您指定的变量名称。之后,当您想要创建对象时,这些类型的信息将不再可用。程序只知道机器指令的操作数所在的机器地址。因为管理器对象可以是无穷多个,所以不能全部命名。C++是一种静态类型语言。严格来说,您需要将manager对象保持在类似数组的结构中:
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));
}
}
但请注意,您需要删除apppriate位置中的manager对象指针以避免泄漏:
delete vManagers[n];
vManagers[n] = NULL;
除非您遍历数组试图通过name
查找管理器
,否则没有什么真正关心它。每个对象中存储的值比名称多,恰好manager构造函数只需要一个。此时,manager1
对象将在add\u manager
函数的末尾被销毁,因为它是在堆栈上分配的,我猜这不是您想要的?也许你想在堆上动态分配?当整个程序结束时它应该被销毁,不是吗?我上面的代码只是相关部分的一个片段。我遗漏了其他所有内容,但在程序结束之前,会自动显示一组有关经理和其他员工的信息,此时我希望所有信息都被销毁。有人建议我在manager类中设置一个静态计数器以启用搜索,但我不确定如何实现这一点。至于要点,所以即使每个管理器对象都是用manager manager1创建的,因为创建的指针将指向它的特定管理器对象,这没有什么区别?还是我误解了?在程序的生命周期中,是否会在数组中保留指向它们的指针并执行相同的操作?我们还没有看到向量,我们需要在某个地方使用动态内存。我试图让这个向量系统工作,但我认为因为我把向量存储在另一个对象中,所以我做错了。如果你能看一看的话,我已经发了一篇关于更详细的帖子,因为你对我需要什么有更好的了解。
delete vManagers[n];
vManagers[n] = NULL;