内容纲要
struct 和 class 区别
在C++ 中 struct 和 class 唯一的 区别 就在于 默认的访问权限不同!!
struct | 默认权限为公共 |
---|---|
class | 默认权限为私有 |
成员属性私有化
优点1:将所有成员属性设置为私有,可以自己控制读写权限。
优点2:对于读写权限,我们可以检测数据的有效性
-
比如年龄的设置,可以在 set 函数中用 if 条件判断来限制传入的参数!!
参考java 面向对象部分 set/get 方法。
案例:设计立方体类
设计立方体类:
1.求出立方体的面积和体积;
2.分别利用全局函数和成员函数判断两个立方体是否相等。
#include <iostream>
#include "string"
using namespace std;
class Cube
{
public:
double m_L;
double m_W;
double m_H;
double area;
double cube;
public:
void setArea() {
if ((m_L && m_W && m_H) != 0) {
area = 2 * ((m_L * m_W) + (m_L * m_H) + (m_W * m_H));
}
}
void setCube() {
if ((m_L && m_W && m_H) != 0) {
cube = m_L * m_W * m_H;
}
}
bool compareCubeByClass( Cube c2) {
return (m_W == c2.m_W) && (m_H == c2.m_H) && (m_L == c2.m_L) ? true : false;
}
void showInfo() {
cout << "体积为:" << cube << "\t总面积为:" << area;
}
};
bool compareCube(Cube c1, Cube c2) {
return (c1.m_W == c2.m_W) && (c1.m_H == c2.m_H) && (c1.m_L == c2.m_L) ? true : false;
}
void main()
{
Cube c1;
c1.m_W = 10;
c1.m_H = 20;
c1.m_L = 30;
c1.setArea();
c1.setCube();
c1.showInfo();
cout << endl;
Cube c2;
c2.m_W = 10;
c2.m_H = 20;
c2.m_L = 30;
c2.setArea();
c2.setCube();
c2.showInfo();
bool res = c2.compareCubeByClass(c1);
if (res == false)
{
cout << endl << "不是同一个" << endl;
}
else
{
cout << endl << "是同一个" << endl;
}
}
点和圆之间的关系
设计一个圆类(circle),和一个点类(Point),计算点和圆的关系
圆内、圆外、圆上
- 没必要用开放公式,直接对比平方就行。
#include <iostream>
#include <math.h>
using namespace std;
class Circle{
public:
void setX(int x) {
cx = x;
}
void setY(int y) {
cy= y;
}
void setR(int r) {
cr = r;
}
int getX() {
return cx;
}
int getY() {
return cy;
}
int getR() {
return cr;
}
private:
int cr; //定义半径
int cx; //定义X轴
int cy; //定义y轴
};
class Point{
public:
void setX(int x) {
px = x;
}
void setY(int y) {
py = y;
}
int getX() {
return px;
}
int getY() {
return py;
}
private:
double px; //定义点的x轴
double py; //定义点的y轴
};
int situation(Circle circle , Point point){
int distance;
int x2 = (unsigned int)((circle.getX() - point.getX()) * (circle.getX() - point.getX()));
int y2 = (unsigned int)((circle.getY() - point.getY()) * (circle.getY() - point.getY()));
distance = sqrt((unsigned)(x2 - y2));
if (distance > circle.getR())
{
return 1;
}
else if (distance == circle.getR()) {
return 0;
}
else
{
return -1;
}
}
void main() {
Circle C1;
C1.setX(3);
C1.setY(4);
C1.setR(10);
Point P1;
P1.setX(13);
P1.setY(4);
Point P2;
P2.setX(3);
P2.setY(4);
int res;
res = situation(C1, P1);
if (res == -1)
{
cout << "在圆内" << endl;
}
else if(res == 1) {
cout << "在圆外" << endl;
}
else
{
cout << "在圆上" << endl;
}
}
设计类和头文件模块化设计
-
项目文件分为:
circle.h
circle.cpp
point.h
point.cpp
点和圆的关系.cpp
-
目的是为了让结构更加清晰,所有代码可以分别封装在不同的文件。调用时逻辑更为合理
实现类
实现类中:主要存放main() 函数,以及实现某方法所需的函数
注意:要包含进point.h 和circle.h
点类头文件
头文件中:类的声明,方法的声明,以及局部变量的定义.
注意:这里只写定义,不写实现,看起来更有条理
点类实现.cpp文件
实现.cpp文件:主要针对头文件声明的函数进行具体实现.
注意:要#include "头文件.h"
,以及交代清楚实现的函数的作用域 ::