【问题标题】:Declaring multiple objects of different classes with the same name用相同的名称声明不同类的多个对象
【发布时间】:2016-12-25 14:19:07
【问题描述】:

我可以声明多个具有相同名称但在不同类中的对象吗?或者这会让一切陷入混乱?让我包含一些代码来帮助理解我想要做什么:

class get{
    public:
        string info(){
            int str; cin >> str;
            return str;
        };
};
class store{
    public:
        string data;
}

int main(){
    get foo;
    store foo;

    foo.data = foo.info();

    cout << foo.data;

    return 0;
}

请注意,这不一定是我使用的代码,只是一个示例。如果我需要详细说明,请告诉我。谢谢大家!

【问题讨论】:

  • 你知道你可以编译这个并找出答案。你会看到它失败了。顺便说一句,您为什么要拥有多个具有相同名称的变量?您如何区分它们?
  • @NathanOliver 仅用于组织目的。另外,我的编译器出现故障,我正在寻找一个新的。
  • 不,这不起作用。但是,您可以将一个变量命名为 Foo 和另一个 foo,因为 C 语言区分大小写。但是这样的代码会被认为是丑陋的,并且会(如你所说)把一切都搞得一团糟......
  • @Creep2DJ 有很多在线编译器可供您使用。

标签: c++ scope declaration


【解决方案1】:

您不能在同一范围内声明两个具有相同名称的对象。编译器会报错。

但是例如这个代码是有效的

#include <iostream>
#include <string>

class get
{
public:
    std::string info() const 
    {
        std::string str; 
        std::cin >> str;
        return str;
    }
};

class store
{
public:
    std::string data;
};

store foo;

int main()
{
    get foo;

    ::foo.data = foo.info();

    std::cout << ::foo.data << std::endl;

    return 0;
}

因为两个同名对象定义在不同的作用域中,并且使用了限定名。

您也可以声明一个与同一范围内的类名同名的对象。例如

store store;

在这种情况下,对象的名称隐藏了类的名称。

【讨论】:

  • 这太完美了!非常感谢,这肯定会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多