C++ class 上使用的一元运算符是什么意思? (Class::Class)

C++ what does the unary operator used on class mean ? (Class::Class)

我遵循了 youtube 教程,我可以创建基本的 class 但是教程没有解释 Class::Class 是如何工作的,我搜索 google 但我只知道它是称为一元运算符及其作用,但我不知道它与 Class 有什么关系,请帮我解释一下,非常感谢。

#include <iostream>
#include <string>

//Class
class Mother {

    public:
        void msg();

};

void Mother::msg(){ //This is where i don't undrstand
    std::cout << "Go home early sweetie" << std::endl;
}

class Daughter: public Mother {

    public:
        void getMsg();

};

void Daughter::getMsg(){ //Same as this
    std::cout << "Mom said ";
    msg();
}


//Main
int main() {

    Daughter lucy;
    lucy.getMsg();

    return 0;
}

在你的 class 中,你声明了一个成员函数 msg(),但你实际上并没有在那里定义它:

class Mother {
public:
    void msg();
};

通常这个声明放在一个.h文件中,现在你想把函数定义放在一个.cpp文件中。但是你不能只写

void msg() 
{
  // ..
}

在您的 .cpp 文件中,因为这将定义全局函数,而不是成员函数。此外,编译器无法知道您真的在尝试定义成员函数,因为此时可以声明多个 classes。因此,您需要一种方法来告诉编译器该函数位于 Mother class:

void Mother::msg()
{
  //..
}

命名空间使用相同的语法。从 std 命名空间中获取 class string

std::string myString;

编辑: 一个特殊的函数是构造函数,它与 class 同名。定义如下所示:

Mother::Mother()
{
  // ..
}

在这个构造函数中,可以初始化成员变量,一般设置class实例。所有成员变量都在此时创建。现在,如果你有一个类型的成员变量,你想将参数传递给它的构造函数怎么办?假设您有一个成员 var,其构造函数采用 int:

 Mother::Mother() :
   var(1)
 {
   // ..
 }

因此 var 的构造函数在 Mother 的构造函数主体之前被调用,您可以向它传递参数。

Class::Class() 不是一元运算符 - 它是名为 Class 的 class 的 default constructor。换句话说,它是当您有如下语句时执行的代码:

Class my_instance;

Class another_instance();

默认构造函数中的代码通常会初始化数据字段或分配系统资源。默认构造函数(或任何构造函数)的对应物是 Destructor,表示为 Class::~Class() - 它通常会释放资源。当然,构造函数和析构函数可以用来做各种各样的事情——它们和其他函数一样有主体。

我不太确定这对您提供的代码示例(使用 msg() 方法)有帮助 - 但这就是您开始提问的原因,所以我希望这对您有所帮助。