Where and how to define member variables? In header or implementation file?

社会主义新天地 提交于 2019-12-13 23:10:47

问题


I am currently learning C++. I have practice (about 2 years) in Java (which I learned at my university).

I have problems understanding the concept of classes and member variables in C++. Given the following example:

File: Mems.h:

class Mems{

int n;
Mems();
};

File Mems.cpp:

class Mems{

Mems::Mems(){
    //Do something in constructor
}
};

I do not know, where I have to put my variables if I want them to stick to the object:

When i define them in the header-file I cant access them in the cpp File and vice versa.

Could you please give me a hint?


回答1:


You don't need to re-declare the class in the .cpp file. You only need to implement its member functions:

#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;    
}

Note that usually you want the default constructor to be public. Members are private by default in C++ classes, and public in structs.

class Mems
{
 public:
  Mems();
 private:
  int n;
};



回答2:


class Mems
{
public:
  int n;
  Mems();
};

In this case, n is a member variable for your class Mems. Inside the class, you can access it like this:

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
}

Outside the Mems class, you can access any public member variables like this:

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


来源:https://stackoverflow.com/questions/22271290/where-and-how-to-define-member-variables-in-header-or-implementation-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!