c++;用变量命名类对象 我正在通过C++问题集来进行娱乐。我正在创建一个循环,将对象添加到具有随机特征的类中。这些随机特征之一是对象名称。我有一个随机生成类对象名称的程序,但我不知道如何将这些名称分配给类对象

c++;用变量命名类对象 我正在通过C++问题集来进行娱乐。我正在创建一个循环,将对象添加到具有随机特征的类中。这些随机特征之一是对象名称。我有一个随机生成类对象名称的程序,但我不知道如何将这些名称分配给类对象,c++,class,variables,C++,Class,Variables,这是我的类及其构造函数: #include "stdafx.h" #include <iostream> #include "windows.h" #include <string> #include <sstream> #include <array> #include <time.h> #include <conio.h> class Bunny { public: char fname; int se

这是我的类及其构造函数:

#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include <string>
#include <sstream>
#include <array>
#include <time.h>
#include <conio.h>

class Bunny
{
public:
    char fname;
    int sex, age, color, status;
    Bunny(int, int, int, int);
    int s() { return (sex); }
    int a() { return (age); }
    int c() { return(color);}
    int st() { return (status);}
};

Bunny::Bunny(int s, int a, int c, int st)
{
    sex = s;
    age = a;
    color = c;
    status = st;
}

这不起作用,因为它创建了一个名为“name”而不是“Susan”的类对象。如何通过变量为类对象指定名称,而不是在代码中手动指定名称

你不能。正确的方法是将兔子对象存储在
贴图中,其中名称是键,例如:

std::map<std::string, Bunny> bunnies;
std::string name;
for (n = 0; n < 1; n++) {
    ...
    // Assign a name to "name"
    ...
    bunnies[name] = Bunny(s, a, c, st);
}
std::地图兔;
std::字符串名;
对于(n=0;n<1;n++){
...
//为“名称”指定一个名称
...
兔子[名字]=兔子(s,a,c,st);
}

bunnies[“Susan”]
将包含与名称“Susan”相关的
Bunny
,等等。

如果我理解正确,您希望创建变量而不是变量的内容。 这是不可能的,编译器会生成一个符号,最终引用内存中某个变量的地址(人类可读的名称)。
在运行时,这些人类可读的符号已经失去了用途。无论如何,为什么要使用动态变量名?

首先,您混淆了术语“成员”的用法类的成员是在类中定义的方法和变量,在您的情况下,这些方法和变量是变量“fname”、“sex”、“age”、“color”和“status”,以及方法s()、a()、c()和st()。当你叫“兔子名(s,a,c,st)”时,你在创造什么不是“成员”,而是该类的“实例”

第二,没有办法做你想做的事。变量名只对程序员存在,在运行时没有意义(除非您正在调试)。变量名必须能够在编译时确定,而尝试随机化则发生在运行时

当您创建一个“std::string name”并随后创建一个“Bunny name(…)”时,您创建的是两个名为“name”的不同变量,当您重用它时,它已经在使用,这一事实对新对象的构造函数没有任何影响。如果有的话,编译器应该向您抱怨您正在重用现有的变量名,尽管新的变量名仅限于循环的范围


然而,真正的问题是,你为什么想要/需要这样做?如果您的变量名是随机的,那么您将如何在程序的其他地方引用这些变量?如果这样做的原因是需要创建多个类实例,而事先不知道它们的标识符或所需的总数,那么我建议查看std::vector

C++类在运行时不能修改。使用
std::map
生成类似
“Susan”的字符串
转换数据。不要使用单字母变量名。这使得你的代码很难阅读。还要注意,你似乎把类的实例和类的成员混淆了。我建议重读C++参考。我做对了吗?是否要修改程序执行过程中的源代码并重新运行它(毫无理由,变量名在程序执行过程中是无用的,因为所有内容都会使用地址和偏移量进行转换)?当然不是一个好方法,尽管你指的是
兔子[“Susan”]
@Barmar:对;已修复。如何使用新对象访问类函数?在我的示例中,访问函数a()id使用
Susan.a()
。会是
bunnies[“Susan”].a()
?我正在生成随机类对象,最多1000个,输入1000个类对象名称似乎很乏味,所以我使用循环生成它们。变量只是将名称从生成器移动到对象的一种方式。生成了一个“名称”列表,以便我以后可以调用这些值。如果您像下面的jwodder那样包含一个示例,您的答案将更有帮助。我在第一次发布回复后曾想过返回并添加一个示例,但jwodder的示例或多或少正是我应该使用的示例,使用字符串值映射作为类实例的标识符
   Bunny Susan(1, 0, 2, 0); 
std::map<std::string, Bunny> bunnies;
std::string name;
for (n = 0; n < 1; n++) {
    ...
    // Assign a name to "name"
    ...
    bunnies[name] = Bunny(s, a, c, st);
}