Где и как определить переменные-члены? В заголовке или файле реализации?
В настоящее время я изучаю C++. У меня есть практика (около 2 лет) на Яве (которую я изучил в моем университете).
У меня проблемы с пониманием концепции классов и переменных-членов в C++. Учитывая следующий пример:
Файл: Mems.h:
class Mems{
int n;
Mems();
};
Файл Mems.cpp:
class Mems{
Mems::Mems(){
//Do something in constructor
}
};
Я не знаю, где я должен поместить свои переменные, если я хочу, чтобы они придерживались объекта:
Когда я определяю их в заголовочном файле, я не могу получить к ним доступ в файле cpp и наоборот.
Не могли бы вы дать мне подсказку?
2 ответа
Вам не нужно повторно объявлять класс в .cpp
файл. Вам нужно только реализовать его функции-члены:
#include "Mems.h"
#include <iostream> // only required for the std::cout, std::endl example
Mems::Mems() : n(42) // n initialized to 42
{
std::cout << "Mems default constructor, n = " << n << std::endl;
}
Обратите внимание, что обычно вы хотите, чтобы конструктор по умолчанию был public
, Члены private
по умолчанию в классах C++, и public
в структурах.
class Mems
{
public:
Mems();
private:
int n;
};
class Mems
{
public:
int n;
Mems();
};
В этом случае, n
переменная-член для вашего класса Mems
, Внутри класса вы можете получить к нему доступ следующим образом:
Mems::Mems() //you don't actually need to use the class keyword in your .cpp file; just the class name, the double colon, and the method name is enough to mark this as a class method
{
//Do something in constructor
n = 5; //this sets the value of n within this instance of Mems
}
Вне Mems
класс, вы можете получить доступ к любым общедоступным переменным-членам, например так:
Mems myMems;
int myNum;
myMems.n = 10; //this sets the value of n in this instance of the Mems class
myNum = myMems.n; //this copies the value of n from that instance of the Mems class