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()
方法)有帮助 - 但这就是您开始提问的原因,所以我希望这对您有所帮助。
我遵循了 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()
方法)有帮助 - 但这就是您开始提问的原因,所以我希望这对您有所帮助。