1. 封装的意义
类和对象
C++面对对象三大特性:封装、继承、多态
C++认为万事万物都皆为对象,对象上有其属性和行为
例如:
人可以作为对象,属性有姓名、年龄、身高...行为有走、跑、吃饭、唱歌
车也可以作为对象、属性有轮胎、方向盘...行为有载入、放音乐
具有相同性质的对象,我们可以抽象为类,人属于人类,车属于车类*/
封装:
封装的意义:1.将属性和行为作为一个整体,表现生活中的事物
2.将属性和行为加以权限控制
封装意义一:
在设计类的时候,属性和行为写在一起,表现事情
语法:class 类名{ 访问权限: 属性 / 行为 };*/
#include <iostream>
using namespace std;
/*类和对象
C++面对对象三大特性:封装、继承、多态
C++认为万事万物都皆为对象,对象上有其属性和行为
例如:
人可以作为对象,属性有姓名、年龄、身高...行为有走、跑、吃饭、唱歌
车也可以作为对象、属性有轮胎、方向盘...行为有载入、放音乐
具有相同性质的对象,我们可以抽象为类,人属于人类,车属于车类*/
/*封装:
封装的意义:1.将属性和行为作为一个整体,表现生活中的事物
2.将属性和行为加以权限控制
封装意义一:
在设计类的时候,属性和行为写在一起,表现事情
语法:class 类名{ 访问权限: 属性 / 行为 };*/
//示例1.设计一个圆类,求园的周长
//园求周长的公式:2 * PI * 半径
const double PI = 3.14;
//class 代表设计一个类,类后面紧跟的就是类名称
class Circle
{
//访问权限
//公共权限
public:
//属性
int m_r;
//行为
//获取圆的周长
double calculateZC()
{
return 2 * PI * m_r;
}
};
int main()
{
//通过圆类 创建具体的圆(对象)
//实例化 (通过一个类 创建一个对象的过程)
Circle c1;
//给圆对象 的属性进行赋值
c1.m_r = 10;
cout << "圆的周长为:" << c1.calculateZC() << endl;
system("pause");
return 0;
}
2.实例—学生类
#include <iostream>
using namespace std;
#include <string>
//设计一个学生类,属性有姓名和学号,可以给姓名
class student
{
//访问权限
//公共权限
public:
//类中的属性和行为 我们统称为成员
//属性 成员属性、成员变量
//行为 成员函数、成员方法
//属性
string m_Name; //姓名
int m_Id; //学号
//行为
//显示姓名和学号
void showstudent()
{
cout << "姓名:" << m_Name << "学号:" << m_Id << endl;
}
//通过行为赋值
//给姓名赋值
void setname(string name)
{
m_Name = name;
}
void setid(int id)
{
m_Id = id;
}
};
int main()
{
student s1;
//s1.m_Id = 1;
//s1.m_Name = "张三";
s1.setname("张三");
s1.setid(1);
//显示学生信息
s1.showstudent();
student s2;
s2.m_Id = 2;
s2.m_Name = "李四";
s2.showstudent();
system("pause");
return 0;
}
3. 封装的意义2
封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
1.public 公共权限 成员类内可以访问,类外可以访问
2.protected 保护权限 成员类内可以访问,类外不可以访问,儿子可以访问父亲中的保护内容
3.private 私有权限 成员类内可以访问,类外不可以访问,儿子不可以访问父亲的私有内容
#include <iostream>
using namespace std;
/*封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
1.public 公共权限 成员类内可以访问,类外可以访问
2.protected 保护权限 成员类内可以访问,类外不可以访问,儿子可以访问父亲中的保护内容
3.private 私有权限 成员类内可以访问,类外不可以访问,儿子不可以访问父亲的私有内容*/
class Person
{
public:
//公共权限
string m_Name;
protected:
//保护权限
string m_Cat;
private:
//私有权限
int m_Password;
//private:
public:
void func() /*类内内容*/
{
m_Name = "张三";
m_Cat = "拖拉机";
m_Password = 123456;
}
};
int main()
{
//实例化具体对象
Person p1;
p1.m_Name = "李四";
//p1.m_Car = "奔驰"; // 保护权限内容,类外访问不到
//p1.m_Password = 123; //私有权限内容,类外也是访问不到
//p1.func();
p1.func();
system("pause");
return 0;
}
4. strunct和class的区别
在c++中struct和class唯一的区别在于默认的访问权限不同
区别:
struct 默认权限为公共
class 默认权限为私有
#include <iostream>
using namespace std;
/*在c++中struct和class唯一的区别在于默认的访问权限不同
区别:
struct 默认权限为公共
class 默认权限为私有*/
class c1
{
//上面什么权限都不写
int m_A;//默认权限为私有
};
struct c2
{
int m_A;//默认权限为公共
};
int main()
{
c1 c1;
//c1.m_A = 100; //在class里默认权限为私有,因此不可以访问
c2 c2;
c2.m_A = 100; //在struct默认权限为公共,因此可以访问
system("pause");
return 0;
}
5.成员属性设置为私有
成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
#include <iostream>
using namespace std;
#include <string>
/*成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性*/
//设计人类
class Person
{
public:
//写(设置)姓名
void setName(string name)
{
m_Name = name;
}
//读(获取)姓名
string getName()
{
return m_Name;
}
//读(获取)年龄
//改为可读可写 如果想修改(年龄范围必须是0~150之间)
int getAge()
{
//m_Age = 0;
return m_Age;
}
//改为可读可写 如果想修改(年龄范围必须是0~150之间)
//设置年龄
void setAge(int age)
{
if (age < 0 || age>150)
{
m_Age = 0;
cout << "您输入的年龄有误" << endl;
return;
}
m_Age = age;
}
//写(设置)情人
void setLover(string lover)
{
m_Lover=lover;
}
private:
//姓名 可读可写
string m_Name;
//年龄 只读
int m_Age;
//情人 只写
string m_Lover;
};
int main()
{
Person p;
p.setName("张三");
p.setLover("苍井");
p.setAge(1800);
cout << "姓名为:" << p.getName() << endl;
cout << "年龄为:" << p.getAge() << endl;
//cout << "情人为:" << p.getLover() << endl; 是不可以访问的
//p.m_Name = "张三";
system("pause");
return 0;
}
6. 案例—设计立方体类
设计立方体类(Cube)
求出立方体的面积和体积
分别用全局函数和成员函数判断两个立方体是否相等
#include <iostream>
using namespace std;
/*设计立方体类(Cube)
求出立方体的面积和体积
分别用全局函数和成员函数判断两个立方体是否相等*/
/*1.创建立方体类
2.设计属性
3.设计行为 获取立方体面积和体积
4.分别利用全局函数和成员函数判断两个立方体是否相等*/
class Cube
{
public:
//行为
//设置获取长宽高
//设置长
void setL(int l)
{
m_L = l;
}
//获取长
int getL()
{
return m_L;
}
//设置宽
void setW(int w)
{
m_W = w;
}
//获取宽
int getW()
{
return m_W;
}
//设置高
void setH(int h)
{
m_H = h;
}
//获取高
int getH()
{
return m_H;
}
//获取立方体面积
int calculateS()
{
return 2 * m_L*m_W + 2 * m_W*m_H + 2 * m_L*m_H;
}
//获取立方体体积
int calculateV()
{
return m_L * m_W*m_H;
}
//利用成员函数判断两个立方体是否相等
bool isSameByClass(Cube &c)
{
if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH())
{
return true;
}
return false;
}
private:
//属性
int m_L;
int m_W;
int m_H;
};
//利用全局函数判断,两个立方体是否相等
bool isSame(Cube &c1,Cube &c2)
{
if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH())
{
return true;
}
return false;
}
int main()
{
//创建一个立方体对象
Cube c1;
c1.setL(10);
c1.setW(10);
c1.setH(10);
cout << "c1的面积:" << c1.calculateS() << endl;
cout << "c1的体积:" << c1.calculateV() << endl;
//创建第二个立方体
Cube c2;
c2.setL(10);
c2.setW(10);
c2.setH(11);
//利用全局函数判断
bool ret = isSame(c1, c2);
if (ret)
{
cout << "全局函数判断结果:c1和c2是相等的" << endl;
}
else
{
cout << "全局函数判断结果:c1和c2是不相等的" << endl;
}
//利用成员函数判断
ret = c1.isSameByClass(c2);
if (ret)
{
cout << "成员函数判断结果:c1和c2是相等的" << endl;
}
else
{
cout << "成员函数判断结果:c1和c2是不相等的" << endl;
}
system("pause");
return 0;
}
7. 点和圆的关系
设计一个圆类(Circle),和一个点类(Point),计算点和圆的关系
点到圆心的距离 == 半径 点在圆上
点到圆心的距离 > 半径 点在圆外
点到圆心的距离 < 半径 点在圆内
#include <iostream>
using namespace std;
/*设计一个圆类(Circle),和一个点类(Point),计算点和圆的关系
点到圆心的距离 == 半径 点在圆上
点到圆心的距离 > 半径 点在圆外
点到圆心的距离 < 半径 点在圆内*/
//点类
class Point
{
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;
}
private:
int m_X;
int m_Y;
};
class Circle
{
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;
}
//行为
private:
int m_R; //半径
//在类中可以让另一个类 作为本类的成员
Point 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);
system("pause");
return 0;
}