首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在类类型变量实例化时打印其名称?

如何在类类型变量实例化时打印其名称?
EN

Stack Overflow用户
提问于 2019-07-11 10:42:19
回答 3查看 210关注 0票数 3

我有一个名为Student的类,我正在主程序中创建一个实例Alex。在创建实例Alex时,是否可以打印"Alex正在创建“。如果变量名为"Joe",则应该打印“”。

这是我的课程定义

代码语言:javascript
运行
复制
class Student
{
    public:
    int rollNo;
    string address;

    Student(int rollNo, string address)
    {
        this.rollNo = rollNo;
        this.address = address;
    }
    //setter , getter functions.
};

//在主程序中

代码语言:javascript
运行
复制
Student Alex;
Student Joe;

Note1:是的,我们可以在学生类中有变量" name“,并在实例化它的同时传递名称Alex/Joe,并根据需要在构造函数中打印。但这不是我的案子。我纯粹不想传递名字

EN

回答 3

Stack Overflow用户

发布于 2019-07-11 10:47:11

没有宏就无法自动完成这一任务,因为C++不支持反射。一种可能是在呼叫站点上使用宏:

代码语言:javascript
运行
复制
#define CREATE_VARIABLE(type, name) \
    ::std::cout << "Creating " #name " of type " #type << '\n'; \
    type name

用作:

代码语言:javascript
运行
复制
CREATE_VARIABLE(Student, Alex);
CREATE_VARIABLE(Student, Joe){joeRollNo, joeAddress};
票数 5
EN

Stack Overflow用户

发布于 2019-07-11 10:49:20

否,因为变量名称是表达式的一部分,该表达式引用声明对象的作用域中的对象。

它对对象本身是不可用的,甚至可能在运行时不存在,而且无论如何,在C++中创建任何命名表达式都没有引用的匿名对象,或者由多个不同的命名表达式引用的对象是很简单的。

当然,您可以显式地这样做,或者像Vittorio所显示的那样使用宏。

票数 0
EN

Stack Overflow用户

发布于 2019-07-11 12:19:03

无法在创建时打印变量的名称。也不会很有帮助。考虑一下这一守则:

代码语言:javascript
运行
复制
Student Alex;
Student Joe;
Student &some_student = Alex;
Student *another_student = &Alex;
Student Alex;
void print_students_address(const Student &student);

这些行中的每一行都应该打印什么名称?你不想用地址来打印学生的名字而不是变量的名字:“学生”吗?

正确的解决方案是将一个成员“字符串名”添加到Student类中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56987393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档