c++ - 为初学者澄清 C++ 中类定义和实现的一些细节

标签 c++ class constructor derived-class

我是 C++ 的初学者,正在尝试通过查看示例来学习它。 这是一个我不完全理解其含义的类的示例定义:

class MyClass{
public:
  std::string name;
  void *data;

  MyClass(const std::string& t_name, void *t_data) : name(t_name), data(t_data) {}
};

这是我的理解: name 和 *data 是类的变量,MyClass(...) 是构造函数。的含义:是左侧类派生自右侧类。然而,这部分代码是什么意思:

MyClass(const std::string& t_name, void *t_data) : name(t_name), data(t_data) {}

问题如下:

  1. 什么是“t_data”和“t_name”?它们是“数据”和“名称”的初始值吗?这里使用 t_ 的原因是什么?
  2. 上面一行中的 : 是什么意思?
  3. 该行末尾的 {} 是什么?

感谢您的帮助。 田杰

最佳答案

what are "t_data" and "t_name"? Are they initial values for "data" and "name"?

它们是传递给构造函数的参数。如果一个对象被创建为

MyClass thing("Fred", some_pointer);

然后,在构造函数中,t_name 的值为 "Fred"t_data 的值为 some_pointer.

what is the reason t_ is used here?

有些人喜欢标记参数,以便为类成员赋予不同的名称,但除非您愿意,否则没有必要这样做。

what is the meaning of : in the above line?

这标志着初始化器列表的开始,它初始化了类成员变量。以下初始化程序 name(t_name), data(t_data) 使用构造函数的参数初始化这些成员。

what is {} at the end of that line?

那是构造函数的主体,就像一个函数主体。它们中的任何代码都将在成员初始化后运行。在这种情况下,没有其他事情可做,所以 body 是空的。

关于c++ - 为初学者澄清 C++ 中类定义和实现的一些细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457631/

相关文章:

c++ - 如何在自己的类中使用 wxWidgets 类型?

java - 如何从 Java 中的另一个类调用整个类?

c++ - 类的成员复制

java - 我的构造函数没有接受变量

c++ - 如何编写以负数结尾的循环 (MyProgrammingLab 11138)

c++ - boost::asio::yield_context 可以设置 std::error_code 而不是 boost::system::error_code 吗?

c++ - 将一对 move 到 vector 中

c++ - 非成员(member)运营商作为外国类(class)的私有(private)成员(member)

c++ - 如何从另一个构造函数调用 C++ 类构造函数

java - 使用公历作为时间戳