【问题标题】:Direct initialization of object's variable using input from user使用来自用户的输入直接初始化对象的变量
【发布时间】:2017-06-26 17:12:37
【问题描述】:

以下代码:

#include <iostream>
class Test
{
public:
    int i;
    void get();
};
void Test::get()
{
    std::cout << "Enter the value of i: ";
    std::cin >> i; // Line 1
}
Test t;
int main()
{
    Test t;
    t.get();
    std::cout << "value of i in local t: "<<t.i<<'\n';
    ::t.get(); 
    std::cout << "value of i in global t: "<<::t.i<<'\n';
    return 0;
}

虽然我知道上面代码中发生了什么,即值被分配给本地和全局 t ,但我对 line 1 感到困惑,因为我无法了解 第 1 行 从用户收到的值是如何分配给 t.i::t.i 的。

如果有人能帮我解释**上述问题的幕后**,将不胜感激。

【问题讨论】:

  • 什么是混乱? get 将数据存储在 i 中。因此,如果您调用t.get,它会将其存储在t::i 中。如果您调用::t.get,它会将其存储在::t::i
  • 在第 1 行,变量 i 被赋予从用户读取的值。这是对象的实例变量。即使是全局对象或局部对象,实例方法内部没有显式定义的变量,如果没有局部声明,则引用实例变量。
  • @RaviChandra:请不要在 cmets 部分回答。谢谢。
  • “无法理解”并不是一个真正的问题。 具体是什么问题?在研究该主题时您没有理解什么?
  • 您是否熟悉this 指针及其隐含位置?

标签: c++ class object initialization


【解决方案1】:

Test::get() 是一个成员函数

在成员函数中,您可以命名该类的任何成员变量,它会影响您调用该函数的对象。

阅读 C++ 书中关于类的章节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多