C ++一元运算符在课堂上使用的是什么意思? (类::类)

时间:2016-12-29 13:23:00

标签: c++ class unary-operator

我按照了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;
}

2 个答案:

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