我对如何将一个简单类的实现和声明代码分离到一个新的头文件和cpp文件感到困惑。例如,我如何为下面的类分离代码?
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y)
{
gx = x;
gy = y;
}
int getSum()
{
return gx + gy;
}
};
我对如何将一个简单类的实现和声明代码分离到一个新的头文件和cpp文件感到困惑。例如,我如何为下面的类分离代码?
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y)
{
gx = x;
gy = y;
}
int getSum()
{
return gx + gy;
}
};
当前回答
类声明放在头文件中。添加#ifndef include守卫是很重要的。大多数编译器现在也支持#pragma一次。另外,我省略了private,默认情况下c++类成员是private。
// A2DD.h
#ifndef A2DD_H
#define A2DD_H
class A2DD
{
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
#endif
实现在CPP文件中:
// A2DD.cpp
#include "A2DD.h"
A2DD::A2DD(int x,int y)
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}
其他回答
A2DD.h
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
A2DD.cpp
A2DD::A2DD(int x,int y)
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}
其思想是将所有函数签名和成员保存在头文件中。 这将允许其他项目文件看到类的样子,而不需要知道实现。
除此之外,你还可以在实现中包含其他头文件,而不是头文件。这一点很重要,因为头文件中包含的任何头文件都将包含(继承)在包含您的头文件的任何其他文件中。
类声明放在头文件中。添加#ifndef include守卫是很重要的。大多数编译器现在也支持#pragma一次。另外,我省略了private,默认情况下c++类成员是private。
// A2DD.h
#ifndef A2DD_H
#define A2DD_H
class A2DD
{
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
#endif
实现在CPP文件中:
// A2DD.cpp
#include "A2DD.h"
A2DD::A2DD(int x,int y)
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}
通常你的.h包含类定义,它是你所有的数据和所有的方法声明。你的情况是这样的:
A2DD.h:
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
然后你的.cpp包含了这些方法的实现,就像这样:
A2DD.cpp:
A2DD::A2DD(int x,int y)
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}
通常你只在头文件中放入声明和非常短的内联函数:
例如:
class A {
public:
A(); // only declaration in the .h unless only a short initialization list is used.
inline int GetA() const {
return a_;
}
void DoSomethingCoplex(); // only declaration
private:
int a_;
};
基本上是函数声明/定义的修改语法:
a2dd.h
class A2DD
{
private:
int gx;
int gy;
public:
A2DD(int x,int y);
int getSum();
};
a2dd.cpp
A2DD::A2DD(int x,int y)
{
gx = x;
gy = y;
}
int A2DD::getSum()
{
return gx + gy;
}