我按照了youtube教程,我可以创建基础类,但教程没有解释Class :: Class如何工作,我搜索谷歌但我只知道它被称为一元运算符,它做了什么,但我不知道它对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;
}
答案 0 :(得分:0)
在你的课程中,你声明了一个成员函数msg()
,但你实际上没有在那里定义它:
class Mother {
public:
void msg();
};
通常此声明会进入.h文件,现在您要将函数定义放在.cpp文件中。但你不能只写
void msg()
{
// ..
}
在.cpp文件中,因为这将定义全局函数,而不是成员函数。此外,编译器无法知道您确实在尝试定义成员函数,因为此时可以声明几个类。因此,您需要一种方法来告诉编译器该函数存在于Mother
类中:
void Mother::msg()
{
//..
}
命名空间使用相同的语法。从string
命名空间中获取课程std
:
std::string myString;
编辑: 一个特殊的函数是构造函数,它与类具有相同的名称。定义如下:
Mother::Mother()
{
// ..
}
在此构造函数中,您可以初始化成员变量并通常设置类实例。此时创建所有成员变量。现在,如果您有一个类型的成员变量,您希望将参数传递给其构造函数,该怎么办?假设您的成员var
的构造函数带有int
:
Mother::Mother() :
var(1)
{
// ..
}
因此var
的构造函数在Mother
的构造函数体之前被调用,您可以将参数传递给它。
答案 1 :(得分:0)
Class::Class()
不是一元运算符 - 它是名为Class
的类的default constructor。换句话说,当您拥有如下语句时,它就会被执行的代码:
Class my_instance;
或
Class another_instance();
默认构造函数中的代码通常初始化数据字段或分配系统资源。默认构造函数(或任何构造函数)的对应物是析构函数,表示为Class::~Class()
- 通常会释放资源。当然,构造函数和析构函数可以做各种各样的事情 - 它们就像任何其他函数一样具有正文。
我不太确定这可以帮助您使用您提供的代码示例(使用msg()
方法) - 但这就是您开始提问的原因,所以我希望这会有所帮助。