Где и как определить переменные-члены? В заголовке или файле реализации?

В настоящее время я изучаю 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
Другие вопросы по тегам