本人小白,跟着网上找来的视频学C++,之前已经了解了C++的基本语法,今天看到视频里的一个把CPP文件中的类拆分成头文件和CPP文件的方式,结果尝试之后失败了,具体代码如下:
首先是原版代码:#include <iostream>
using namespace std;
// 点和圆的关系
class Point
{
private:
int m_X, m_Y;
public:
// 设置x
void setX(int x)
{
m_X = x;
}
// 获取x
int getX()
{
return m_X;
}
// 设置y
void setY(int y)
{
m_Y = y;
}
// 获取y
int getY()
{
return m_Y;
}
};
class Circle
{
private:
int m_R; // 半径
Point m_Center; // 圆心
public:
// 设置半径
void setR(int r)
{
m_R = r;
}
// 获取半径
int getR()
{
return m_R;
}
// 设置圆心
void setCenter(Point center)
{
m_Center = center;
}
// 获取圆心
Point getCenter()
{
return m_Center;
}
};
// 判断点和圆关系
void isInCircle(Circle &c, Point &p)
{
// 计算亮点之间距离平方
int distance =
(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
// 计算半径的平方
int rDistance = c.getR() * c.getR();
// 判断关系
if (distance == rDistance)
{
cout << "点在圆上~" << endl;
}
else if (distance > rDistance)
{
cout << "点在圆外~" << endl;
}
else
{
cout << "点在圆内~" << endl;
}
}
int main()
{
// 创建圆
Circle c;
c.setR(10);
Point center;
center.setX(10);
center.setY(0);
c.setCenter(center);
// 创建点
Point p;
p.setX(10);
p.setY(10);
// 判断关系
isInCircle(c, p);
}
以上代码因为都放到一个CPP文件里了,不利于后面做项目和扩展,所以做了拆分,分别拆成了两个头文件和两个CPP,以及一个main函数,具体如下:
“点”类的头文件:#pragma once
#include <iostream>
using namespace std;
class Point
{
private:
int m_X, m_Y;
public:
// 设置x
void setX(int x);
// 获取x
int getX();
// 设置y
void setY(int y);
// 获取y
int getY();
};
“点”类的方法体:#include "point.h"
// 点和圆的关系
// 设置x
void Point::setX(int x)
{
m_X = x;
}
// 获取x
int Point::getX()
{
return m_X;
}
// 设置y
void Point::setY(int y)
{
m_Y = y;
}
// 获取y
int Point::getY()
{
return m_Y;
}
“圆”类的头文件:#pragma once
#include <iostream>
#include "point.h"
using namespace std;
class Circle
{
private:
int m_R; // 半径
Point m_Center; // 圆心
public:
// 设置半径
void setR(int r);
// 获取半径
int getR();
// 设置圆心
void setCenter(Point center);
// 获取圆心
Point getCenter();
};
“圆”类方法体:#include "circle.h"
// 设置半径
void Circle::setR(int r)
{
m_R = r;
}
// 获取半径
int Circle::getR()
{
return m_R;
}
// 设置圆心
void Circle::setCenter(Point center)
{
m_Center = center;
}
// 获取圆心
Point Circle::getCenter()
{
return m_Center;
}
main方法:#include <iostream>
#include "point.h"
#include "circle.h"
using namespace std;
// 判断点和圆关系
void isInCircle(Circle &c, Point &p)
{
// 计算亮点之间距离平方
int distance =
(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
// 计算半径的平方
int rDistance = c.getR() * c.getR();
// 判断关系
if (distance == rDistance)
{
cout << "点在圆上~" << endl;
}
else if (distance > rDistance)
{
cout << "点在圆外~" << endl;
}
else
{
cout << "点在圆内~" << endl;
}
}
int main()
{
// 创建圆
Circle c;
c.setR(10);
Point center;
center.setX(10);
center.setY(0);
c.setCenter(center);
// 创建点
Point p;
p.setX(10);
p.setY(10);
// 判断关系
isInCircle(c, p);
}
可最后执行的时候,蹦出了如下提示:
最后补充一句,视频里的老师,用的是微软的C++环境,我本地用的是 GCC 与 G++ 环境,不确定是不是因为环境问题导致,网上也不知道该怎么查,在此厚着脸皮向各位鱼油求教。。
不确定是不是因为环境问题导致
是的,就是因为环境不一样
sh-5.1$ ls
circle.cpp circle.h main.cpp point.cpp point.h
sh-5.1$ cat point.h
// g++用这个
#ifndef _POINT_H_
#define _POINT_H_
//#pragma once // g++不用这个
#include <iostream>
using namespace std;
class Point
{
private:
int m_X, m_Y;
public:
// 设置x
void setX(int x);
// 获取x
int getX();
// 设置y
void setY(int y);
// 获取y
int getY();
};
#endif
sh-5.1$ cat point.cpp
#include "point.h"
// 点和圆的关系
// 设置x
void Point::setX(int x)
{
m_X = x;
}
// 获取x
int Point::getX()
{
return m_X;
}
// 设置y
void Point::setY(int y)
{
m_Y = y;
}
// 获取y
int Point::getY()
{
return m_Y;
}
sh-5.1$ cat circle.h
#ifndef _CIRCLE_H_
#define _CIRCLE_H_
//#pragma once
#include <iostream>
#include "point.h"
using namespace std;
class Circle
{
private:
int m_R; // 半径
Point m_Center; // 圆心
public:
// 设置半径
void setR(int r);
// 获取半径
int getR();
// 设置圆心
void setCenter(Point center);
// 获取圆心
Point getCenter();
};
#endif
sh-5.1$ cat circle.cpp
#include "circle.h"
// 设置半径
void Circle::setR(int r)
{
m_R = r;
}
// 获取半径
int Circle::getR()
{
return m_R;
}
// 设置圆心
void Circle::setCenter(Point center)
{
m_Center = center;
}
// 获取圆心
Point Circle::getCenter()
{
return m_Center;
}
sh-5.1$ cat main.cpp
#include <iostream>
#include "point.h"
#include "circle.h"
using namespace std;
// 判断点和圆关系
void isInCircle(Circle &c, Point &p)
{
// 计算亮点之间距离平方
int distance =
(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
(c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
// 计算半径的平方
int rDistance = c.getR() * c.getR();
// 判断关系
if (distance == rDistance)
{
cout << "点在圆上~" << endl;
}
else if (distance > rDistance)
{
cout << "点在圆外~" << endl;
}
else
{
cout << "点在圆内~" << endl;
}
}
int main()
{
// 创建圆
Circle c;
c.setR(10);
Point center;
center.setX(10);
center.setY(0);
c.setCenter(center);
// 创建点
Point p;
p.setX(10);
p.setY(10);
// 判断关系
isInCircle(c, p);
}
sh-5.1$ ls
circle.cpp circle.h main.cpp point.cpp point.h
sh-5.1$ g++ -g -Wall -o main main.cpp circle.cpp point.cpp
sh-5.1$ ls
circle.cpp circle.h main main.cpp point.cpp point.h
sh-5.1$
|