【学习篇】【C++】【类和对象】【封装】

意义

• 将属性和行为作为一个整体,表现生活中的事物
• 将属性和行为加以权限控制

意义一:语法class 类名{访问权限:属性/ 行为};
意义二:类在设计时,可以把属性和行为放在不同的权限下,加以控制

【三种访问权限】

权限名称类内、类外访问情况继承访问情况
public公共权限成员 类内可以访问、类外也可以访问
protected保护权限成员 类内可以访问、类外不能访问继承中子类可以访问父类的保护内容
private私有权限成员 类内可以访问、类外不能访问继承中子类不能访问父类的保护内容

1.struct和class的区别

唯一的区别在于:默认的访问权限不同
• struct默认权限为公共
• class默认权限为私有

2.成员属性设为私有

优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性

class Person
{
private:
	string m_name; //姓名 可读可写
	string m_lover; //情人 只写
	int m_age; //年龄 只读

public:
	//写年龄(设置姓名)
	void setname(string name)
	{
		m_name = name; 
	}

	//读姓名(获取姓名)
	string getname()
	{
		return m_name;
	}
	
	//读年龄
	int getage()
	{
		return m_age;
	}
	
	//写年龄
	void setname(int age)
	{
		if (age < 0 || age >150)
		{
			m_age = 0;
			cout << "输入的年龄数据有误!" << endl;
			return;
		}
		m_age = age;
	}

	//设置情人
	void setlover(string lover)
	{
		m_lover = lover;
	}
};


int main()
{
	Person p1;
	p1.setname("张三");
	cout << "姓名为: " << p1.getname() << endl;
	p1.setname(18);
	cout << "年龄为: " << p1.getage() << endl;
	p1.setlover("李四");
	return 0;
}

3.封装案例1(立方体)

【立方体类设计】
1.创建立方体类
2.设计属性:长L宽W高H
3.设计行为:获取立方体的面积和体积
4.分别利用全局函数和成员函数判断两个立方体是否相等

(1)步骤1~3:创建类并设计属性和行为

1.创建立方体类
2.设计属性:长L宽W高H
3.设计行为:获取立方体的面积和体积

class Cube
{
private:
	int m_L; //长
	int m_W; //宽
	int m_H; //高
	
public:
int getcube_Area()
	{
		return 2 * (m_L * m_W + m_W * m_H + m_L * m_H);
	}

int getcube_Volume()
	{
		return m_L * m_W * m_H;
	}
};

(2)步骤4:构造函数判断两个立方体是否相等

4.分别利用全局函数和成员函数判断两个立方体是否相等

备注:
此处使用全局函数,则函数参数需要传入两个立方体;
使用成员函数只要传入一个立方体即可(即第二个立方体)。

//利用成员函数判断两个立方体是否相等
class Cube
{
public:
	//利用成员函数判断两个立方体是否相等
	bool isSame2(Cube& c)
	{
		if (m_L == c.get_L() && m_W == c.get_W() && m_H == c.get_H())
		{
			return true;
		}
		return false;
	}
};

//利用全局函数判断两个立方体是否相等
bool isSame1(Cube& c1, Cube& c2)
{
	if (c1.get_L() == c2.get_L() && c1.get_W() == c2.get_W() && c1.get_H() == c2.get_H())
	{
		return true;
	}
	return false;
}

(3)案例1源码

#include<iostream>
#include<string>
using namespace std;

//立方体类设计
//1.创建立方体类
//2.设计属性:长L宽W高H
//3.设计行为:获取立方体的面积和体积
//4.分别利用全局函数和成员函数判断两个立方体是否相等

class Cube
{
private:
	int m_L; //长
	int m_W; //宽
	int m_H; //高

public:
	void set_L(int L)
	{
		m_L = L;
	}
	int get_L()
	{
		return m_L;
	}
	void set_W(int W)
	{
		m_W = W;
	}
	int get_W()
	{
		return m_W;
	}
	void set_H(int H)
	{
		m_H = H;
	}
	int get_H()
	{
		return m_H;
	}

	int getcube_Area()
	{
		return 2 * (m_L * m_W + m_W * m_H + m_L * m_H);
	}

	int getcube_Volume()
	{
		return m_L * m_W * m_H;
	}

	//利用成员函数判断两个立方体是否相等
	bool isSame2(Cube& c)
	{
		if (m_L == c.get_L() && m_W == c.get_W() && m_H == c.get_H())
		{
			return true;
		}
		return false;
	}
};

//利用全局函数判断两个立方体是否相等
bool isSame1(Cube& c1, Cube& c2)
{
	if (c1.get_L() == c2.get_L() && c1.get_W() == c2.get_W() && c1.get_H() == c2.get_H())
	{
		return true;
	}
	return false;
}


int main()
{
	Cube c1;
	c1.set_L(10);
	c1.set_W(10);
	c1.set_H(10);
	cout << "该立方体面积为: " << c1.getcube_Area() << endl;
	cout << "该立方体体积为: " << c1.getcube_Volume() << endl;

	Cube c2;
	c2.set_L(10);
	c2.set_W(10);
	c2.set_H(10);


	bool ret = isSame1(c1, c2);
	if (ret)
	{
		cout << "两个立方体是相等的" << endl;
	}
	else
	{
		cout << "两个立方体不相等" << endl;
	}

	ret = c1.isSame2(c2);
	if (ret)
	{
		cout << "两个立方体是相等的" << endl;
	}
	else
	{
		cout << "两个立方体不相等" << endl;
	}
	return 0;
}

4.封装案例2(点和圆的关系)

计算点和圆心的距离

(1)步骤1:将点类和圆类分文件保存

  1. 点类的头文件point.h
#pragma once
#include<iostream>

using namespace std;

class Point
{
private:
	int m_x;
	int m_y;
public:
	//设置横坐标X
	void setX(int x);

	//设置横坐标Y
	void setY(int y);

	//获得横坐标X
	int getX();

	//获得横坐标X
	int getY();
};
  1. 点类的源文件point.cpp
#include"point.h"

//设置横坐标X
void Point::setX(int x)
{
	m_x = x;
}

//设置横坐标Y
void Point::setY(int y)
{
	m_y = y;
}

//获取横坐标X
int Point::getX()
{
	return m_x;
}

//获取横坐标Y
int Point::getY()
{
	return m_y;
}

  1. 圆类的头文件circle.h
#pragma once
#include<iostream>
#include"point.h"

using namespace std;

class Circle
{
private:
	int m_r; //半径
	Point m_center;
public:
	//设置半径
	void setR(double r);

	//获得半径
	double getR();

	//设置圆心
	void setCenter(Point center);
	
	//获取圆心
	Point getCenter();
};
  1. 圆类的源文件circle.cpp
#include"circle.h"

//设置半径
void Circle::setR(double r)
{
	m_r = r;
}

//获得半径
double Circle::getR()
{
	return m_r;
}

//设置圆心
void Circle::setCenter(Point center)
{
	m_center = center;
}

//获取圆心
Point Circle::getCenter()
{
	return m_center;
}

(2)步骤2:构建函数判断点和圆的关系

void isInCircle(Circle& c, Point& p)
{
	double distance = 
		sqrt(
		pow((c.getCenter().getX() - p.getX()), 2) +
		pow((c.getCenter().getY() - p.getY()), 2)
		);
	if (distance == c.getR())
	{
		cout << "点在圆上" << endl;
	}
	else if (distance > c.getR())
	{
		cout << "点在圆外" << endl;
	}
	else
	{
		cout << "点在圆内" << endl;
	}
}

(3)步骤3:主函数

#include<iostream>
#include<string>
#include"point.h"
#include"circle.h"
using namespace std;

int main()
{
	//创建圆
	Circle c;
	c.setR(10);
	Point center;
	center.setX(10);
	center.setY(0);
	c.setCenter(center);

	//创建点
	Point p, p1, p2;
	p.setX(10); p.setY(10);
	p1.setX(10); p1.setY(9);
	p2.setX(10); p2.setY(11);

	//判读关系
	isInCircle(c, p);
	isInCircle(c, p1);
	isInCircle(c, p2);

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值