如何为不同的类声明相同的对象名称?

Posted

技术标签:

【中文标题】如何为不同的类声明相同的对象名称?【英文标题】:How can I declare same object name for different class? 【发布时间】:2020-11-15 12:56:15 【问题描述】:

通常这是我的代码

#include <iostream>
using namespace std;

class On 
    public:
    int value;
;

class Off 
    public:
    int value;
;


int main() 
    On push;
    push.value = 1;
    cout << push.value << endl;

    return 0;

这里添加了两个名为 On、Off 的类。我想为两个类创建相同的对象名称,如下所示。我知道代码是错误的,但这是我所期望的示例。

// Full source shown above code
int main() 
    
    On push; // 'push' object for the class -> On
    push.value = 1;
    cout << push.value << endl;

    Off push; // 'push' object for the class -> Off
    push.value = 0;
    cout << push.value << endl; 
    // Here's the problem. How can I can define it's coming from an specific/defferent object?

    return 0;

【问题讨论】:

可能是The XY Problem? 为什么要这样做?你将无法分辨pushpush 之间的区别,那么为什么要让它们成为两个对象呢? 名称阴影几乎总是一个错误巢穴,不推荐。 谢谢,@ThomasSablik 你的代码对我有用。实际上,没有必要。我只是在想,如果我在其他任何地方都需要这样,那么我应该如何编写这段代码。这就是为什么问这个问题。感谢大家提供建议。 :) 【参考方案1】:

您可以使用范围:

#include <iostream>
using namespace std;

class On 
    public:
    int value;
;

class Off 
    public:
    int value;
;


int main() 
    
        On push; // 'push' object for the class -> On
        push.value = 1;
        cout << push.value << endl;
    
    
        Off push; // 'push' object for the class -> Off
        push.value = 0;
        cout << push.value << endl; 
        // Here's the problem. How can I can define it's coming from an specific/defferent object?
    

    return 0;

【讨论】:

【参考方案2】:

将每一个放在不同的命名空间中:

namespace N1  On push; 
namespace N2  On push; 

用法:

 N1::push.value
 N2::push.value

【讨论】:

谢谢@ouchane,您的代码也有效。顺便说一句,在您的代码命名空间中 N2 应该是 Off push; 是的,你可以使用任何你想要的类型:)

以上是关于如何为不同的类声明相同的对象名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Spring Data 中的类配置 MongoDb 集合名称

C++ 多个具有相同名称的类

wpf 中,如何为自己的类库映射URI名称空间

如何为具有相同名称的多个文本区域添加ckeditor

如何为 2 个相同的班级选择正确的名称? [关闭]

在Postgres中加入两个表后如何为具有相同名称的列提供别名