c++ 基础知识-类和对象的封装实例
1.计算矩形面积,分别利用全局函数和成员函数判断两个矩形面积是否相等
#include <iostream>
#include <string>
using namespace std;
//计算矩形面积
//分别利用全局函数和成员函数判断两个矩形面积是否相等
class Square
{
public:
//设置参数,获取参数
void setL(int l)
{
m_L = l;
}
int getL()
{
return m_L;
}
void setH(int h)
{
m_H = h;
}
int getH()
{
return m_H;
}
//计算矩形面积
int calculateArea()
{
return m_L * m_H;
}
//利用成员函数判断两个矩形面积是否相等
bool isSameByClass(Square &s)
{
if(calculateArea() == s.calculateArea())
{
return true;
}else{
return false;
}
}
private:
int m_L;
int m_H;
};
//利用全局函数判断两个矩形面积是否相等
//参数类型使用引用
bool isSame(Square &s1,Square &s2)
{
if(s1.calculateArea() == s2.calculateArea())
{
return true;
}else{
return false;
}
}
int main()
{
Square s1;
s1.setH(10);
s1.setL(20);
cout<<"s.getH()="<<s1.getH()<<endl;
cout<<"s.getL()="<<s1.getL()<<endl;
cout<<"s.calculateArea()="<<s1.calculateArea()<<endl;
Square s2;
s2.setH(10);
s2.setL(20);
bool ret = isSame(s1,s2);
if (ret)
{
cout<<"全局函数 : 面积相等"<<endl;
}
else
{
cout<<"全局函数 : 面积不相等"<<endl;
}
bool ret1 = s1.isSameByClass(s2);
if (ret1)
{
cout<<"成员函数 : 面积相等"<<endl;
}
else
{
cout<<"成员函数 : 面积不相等"<<endl;
}
return 0;
}
//s.getH()=10
//s.getL()=20
//s.calculateArea()=200
//全局函数 : 面积相等
//成员函数 : 面积相等
2.判断点与圆的位置,并且利用不同的类调用,并通过保存到不同的文件调用
test.cpp
#include <iostream>
#include <string>
using namespace std;
#include "Point.h"
#include "Circle.h"
//判断点与圆心的位置
void isInCircle(Circle &c,Point &p)
{
//点到圆心的距离
int distance = (p.getX() - c.getCenter().getX())*(p.getX() - c.getCenter().getX())+
(p.getY() - c.getCenter().getY())*(p.getY() - c.getCenter().getY());
if (distance == c.getR())
{
cout<<"点在圆上"<<endl;
}
else if(distance > c.getR())
{
cout<<"点在圆外"<<endl;
}
else
{
cout<<"点在圆内"<<endl;
}
}
int main()
{
Circle c;
c.setR(5);
Point center;
center.setX(5);
center.setX(0);
c.setCenter(center);
Point p;
p.setX(9);
p.setX(0);
isInCircle(c,p);
return 0;
}
Circle.h
#ifndef _CIRCLE_H_ //如果没有定义头文件circle.h,则执行下面的代码。这是防止重复定义
#define _CIRCLE_H_ //定义头文件
//#pragma once
#include <iostream>
using namespace std;
#include "Point.h"
//圆类
class Circle
{
public:
void setR(int r);
int getR();
void setCenter(Point center);
Point getCenter();
private:
Point m_Center;
int m_R;
};
#endif //表示头文件结束
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;
}
Point.h
#ifndef _POINT_H_ //如果没有定义头文件circle.h,则执行下面的代码。这是防止重复定义
#define _POINT_H_ //定义头文件
//#pragma once
#include <iostream>
using namespace std;
//点类
class Point
{
public:
void setX(int x);
int getX();
void setY(int y);
int getY();
private:
int m_X;
int m_Y;
};
#endif //表示头文件结束
Point.cpp
#include "Point.h"
void Point::setX(int x)
{
m_X = x;
}
int Point::getX()
{
return m_X;
}
void Point::setY(int y)
{
m_Y = y;
}
int Point::getY()
{
return m_Y;
}