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

TJ1*_*TJ1 0 c++ constructor class 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) {}
};
Run Code Online (Sandbox Code Playgroud)

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

MyClass(const std::string& t_name, void *t_data) : name(t_name), data(t_data) {}
Run Code Online (Sandbox Code Playgroud)

以下是问题:

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

谢谢您的帮助.TJ

Mik*_*our 5

什么是"t_data"和"t_name"?它们是"数据"和"名称"的初始值吗?

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

MyClass thing("Fred", some_pointer);
Run Code Online (Sandbox Code Playgroud)

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

这里使用t_的原因是什么?

有些人喜欢标签的参数给他们不同的名称类的成员,但有没有必要做,除非你想.

是什么意思:在上面这行?

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

该行尾的{}是什么?

这是构造函数的主体,就像函数体一样.在成员初始化之后,将运行其中的任何代码.在这种情况下,没有别的事可做,所以身体是空的.