C++, что означает унарный оператор, используемый в классе? (Класс:: класс)
Я следовал учебному пособию по YouTube и могу создать базовый класс, но этот учебник не объясняет, как работает Class::Class, я ищу в Google, но знаю только, что он называется унарным оператором и что он делает, но я не знаю, что он делает с Класс, пожалуйста, помогите мне объяснить об этом и большое спасибо.
#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 ответа
В вашем классе вы объявляете функцию-член 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
и вы можете передать аргументы к нему.
Class::Class()
не является унарным оператором - это конструктор по умолчанию для класса с именем Class
, Другими словами, это код, который выполняется, когда у вас есть такой оператор, как:
Class my_instance;
или же
Class another_instance();
код в конструкторе по умолчанию обычно инициализирует поля данных или выделяет системные ресурсы. Аналогом конструктора по умолчанию (или любого другого конструктора) является Destructor, обозначаемый Class::~Class()
- который обычно высвобождает ресурсы. Конечно, можно создавать конструкторы и деструкторы для выполнения самых разных задач - у них есть тела, как и у любой другой функции.
Я не совсем уверен, что это поможет вам с примером кода, который вы дали (с msg()
метод) - но это то, с чего вы начали свой вопрос, поэтому я надеюсь, что это поможет.