目录
封装
封装的含义
封装的意义1
实例一
实例二
C++面对对象的三大特点:继承、封装、多态。
封装
封装的含义
- 将对象的属性和行为作为一个整体,表现生活中的事物。
- 将属性和行为加以权限控制
封装的意义1
设计一个类,将属性和行为写到一起,表现事物。
语法:class 类名{ 访问权限:属性/行为};
实例一
设计一个圆类,求圆的周长和面积
#include<iostream >
#include<string>
using namespace std;
const double PI = 3.14;
class Circle
{
public:
//属性(半径
int r;
//行为(一般是函数
/*double length()
{
return 2 * PI *r;
}
double area()
{
return PI*r*r;
}*/
};
void getlength(int r)
{
cout << "圆的周长为:" << 2 * r * PI<< endl;
}
void getarea(int r)
{
cout << "圆的面积是:" << PI*r*r << endl;
}
int main()
{
Circle c;//实例化
/*cout << "length=" <<c.length() <<endl;
cout << "" << c.area() << endl;*/
getlength(4);
getarea(4);
system("pause");
return 0;
}
运行结果:
实例二
设计圆类和点类,判断点和圆的关系。
完整代码:
class point//点类
{
public:
//设置x坐标
void setx(int x)
{
p_x = x;
}
//获取x坐标
int getx()
{
return p_x;
}
//设置y坐标
void sety(int y)
{
p_y = y;
}
//获取y坐标
int gety()
{
return p_y;
}
private:
//私有属性 点类有x,y坐标
int p_x;
int p_y;
};
class Circle//圆类
{
public:
void setr(int r)//设置半径
{
c_r = r;
}
double getr()//获取半径
{
return c_r;
}
void setcenter(point center)
{
c_center = center;
}
point getcenter()
{
return c_center;
}
private:
int c_r;
point c_center;//自定义的点类
//在类中,让另一个类做本类中的成员
};
//判断点和圆关系的函数
void Isincircle(Circle &c, point &p)
{
//计算两点之间距离的平方
int d =
(c.getcenter().getx() - p.getx())*(c.getcenter().getx() - p.getx()) +
(c.getcenter().getx() - p.getx())*(c.getcenter().getx() - p.getx());
//计算半径的平方
double R = c.getr()*c.getr();
//判断关系
if (d > R)
{
cout << "点在圆外" << endl;
}
else if (d < R)
{
cout << "点在圆内" << endl;
}
else
{
cout << "点在圆上" << endl;
}
}
int main()
{
Circle c;//圆类实例化
c.setr(10);
point p;//点类实例化
p.setx(1);
p.sety(0);
point center;
center.setx(0);//原点为圆心
center.sety(0);
c.setcenter(center);
Isincircle(c, p);//判断关系
system("pause");
return 0;
}
运行结果:
还可以将point类与circle类写进头文件:
创建相应的point.h头文件,与point.cpp源文件:
#pragma once
#include<iostream>
using namespace std;
class point//点类
{
public:
//设置x坐标
void setx(int x);
//获取x坐标
int getx();
//设置y坐标
void sety(int y);
//获取y坐标
int gety();
private:
//私有属性 点类有x,y坐标
int p_x;
int p_y;
};
#include"point.h"
//设置x坐标
void point ::setx(int x)//
{
p_x = x;
}
//获取x坐标
int point::getx()
{
return p_x;
}
//设置y坐标
void point::sety(int y)
{
p_y = y;
}
//获取y坐标
int point::gety()
{
return p_y;
}
同理,创建相应的circle.h头文件与circle.cpp源文件:
#pragma once
#include<iostream>
using namespace std;
#include"point.h"
class Circle//圆类
{
public:
void setr(int r);
double getr();
void setcenter(point center);
point getcenter();
private:
int c_r;
point c_center;//自定义的点类
//在类中,让另一个类做本类中的成员
};
#include"Circle.h"
void Circle::setr(int r)//设置半径
{
c_r = r;
}
double Circle::getr()//获取半径
{
return c_r;
}
void Circle::setcenter(point center)
{
c_center = center;
}
point Circle::getcenter()
{
return c_center;
}
此时要在主函数中添加:
#include<iostream>
#include"point.h"
#include"Circle"
using namespace std;
//判断点和圆关系的函数
void Isincircle(Circle &c, point &p)
{
//计算两点之间距离的平方
int d =
(c.getcenter().getx() - p.getx())*(c.getcenter().getx() - p.getx()) +
(c.getcenter().getx() - p.getx())*(c.getcenter().getx() - p.getx());
//计算半径的平方
double R = c.getr()*c.getr();
//判断关系
if (d > R)
{
cout << "点在圆外" << endl;
}
else if (d < R)
{
cout << "点在圆内" << endl;
}
else
{
cout << "点在圆上" << endl;
}
}
int main()
{
Circle c;//圆类实例化
c.setr(10);
point p;//点类实例化
p.setx(1);
p.sety(0);
point center;
center.setx(0);//原点为圆心
center.sety(0);
c.setcenter(center);
Isincircle(c, p);//判断关系
system("pause");
return 0;
}
运行结果与上述一致。
看B站黑马程序员的课,自己记得笔记和重点。