C++语言-类和对象

类和对象的概念

  1. 类是自定义数据类型,是C语言的结构体进化而成的
  2. 对象是类实例化出的,用数据类型定义一个变量
#include <iostream>
using namespace std;
class Person//这个是类
{
public:
	int a;//成员属性(成员变量)
	void func()//成员方法(成员函数)
	{
		cout << "func" << endl;
	}
};

int main()
{
	Person m;//m就是对象
	return 0;
}

类的封装

  1. 封装是把属性(变量)和方法(函数)封装到类内,然后给这些数据赋予权限
  2. 为什么要有封装
    1. 防止乱掉用函数和变量,出现错误
    2. 维护代码更方便
  3. 权限
//封装:1,把属性和方法放到类中,2.给这些数据赋予权限
#include <iostream>
using namespace std;
class Person
{
public://公有权限
	void set(string Name,int Id)
	{
		id = Id;
		name = Name;
	}
	void printPerson()
	{
		cout << "id=" << id << " name=" << name << endl;
	}
private://私有
	int id;
	string name;

protected://保护
	int a;
};
//继承
class Student:public Person
{
	void func()
	{
		a = 20;//子类的类内可以方法父类的保护权限的成员
		
	}
};
//类外不能访问私有权限的成员
//类外可以访问公有权限的成员
//类外不能访问保护权限的成员
//子类的类内可以方法父类的保护权限的成员
//类内是没有权限之分

void test()
{
	Person m;
	m.set("小花",1);
	m.printPerson();
	

}
int main()
{
	test();
	return 0;
}
  1. 尽量把属性设置为私有权限
    1. 可以控制属性的读写权限
    2. 可以赋予客户端访问数据的一致性
    3. 可以保护属性的合法性

类和结构体的区别

结构体的默认权限使公有的,类的默认权限使私有的

立方体案例

  1. 抽象立方体:属性,长宽高,方法:设置和获取属性的方法,判断两个立方体是否相等的方法
  2. 一个对象必须要初始化成员变量
  3. 成员函数中隐藏了一个本类的对象
#include <iostream>
using namespace std;

// 立方体类
class Cub
{
public:
	void setL(int l)
	{
		mL = l;
	}
	void setW(int w)
	{
		mW = w;
	}
	void setH(int h)
	{
		mH = h;
	}
	int getL()
	{
		return mL;
	}
	int getW()
	{
		return mW;
	}
	int getH()
	{
		return mH;
	}

	// 立方体面积
	int caculateS()
	{
		return (mL * mW + mL * mH + mW * mH) * 2;
	}
	// 立方体的体积
	int caculateV()
	{
		return mL * mW * mH;
	}
	// 成员方法
	bool cubCompare(Cub& c)
	{
		if (getL() == c.getL() && getW() == c.getW() && getH() == c.getH())
		{
			return true;
		}
		return false;
	}
private:
	// 长
	int mL;
	// 宽
	int mW;
	// 高
	int mH;
};
// 比较两个立方体是否相等
bool cubCompare(Cub& c1, Cub& c2)
{
	if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH())
	{
		return true;
	}
	return false;
}
void test()
{
	Cub c1, c2;
	c1.setL(40);
	c1.setW(30);
	c1.setH(60);

	c2.setL(40);
	c2.setW(50);
	c2.setH(60);

	cout << "c1的面积:" << c1.caculateS() << " ,c1的体积:" << c1.caculateV() << endl;
	cout << "c2的面积:" << c2.caculateS() << " ,c2的体积:" << c1.caculateV() << endl;
	
	// 比较两个立方体是否相等
	if (cubCompare(c1, c2))
	{
		cout << "c1和c2相等" << endl;
	}
	else
	{
		cout << "c1和c2不相等" << endl;
	}
	// 成员函数比较两个立方体是否相等
	if (c1.cubCompare(c2))
	{
		cout << "c1和c2相等" << endl;
	}
	else
	{
		cout << "c1和c2不相等" << endl;
	}
}
int main()
{
	test();
	return 0;
}

点和圆的案例

  1. 抽象点:属性有点的坐标,方法:设置和获取坐标的方法
  2. 抽象圆:属性有圆心和半径,方法:设置和获取圆心的方法,设置和获取半径的方法,判断圆和点的关系的方法
  3. 用圆心和点之间的距离的平方,和半径的平方比较来确定之间的关系,公式为:r²=(x₁-x₂)²+(y₁-y₂)²
  4. 三角型中,两边的平方和等于斜边的平方
#include <iostream>
using namespace std;

//点类
class Point {
public:
	void setX(int x) { mX = x; }
	void setY(int y) { mY = y; }
	int getX() { return mX; }
	int getY() { return mY; }
private:
	int mX;
	int mY;
};

//圆类
class Circle {
public:
	void setP(int x, int y) 
	{
		mP.setX(x);
		mP.setY(y);
	}
	void setR(int r) { mR = r; }
	Point& getP() { return mP; }
	int getR() { return mR; }
	//判断点和圆的关系
	void IsPointInCircle(Point& point) 
	{
		int distance = (point.getX() - mP.getX()) * (point.getX() - mP.getX()) + (point.getY() - mP.getY()) * (point.getY() - mP.getY());
		int radius = mR * mR;
		if (distance < radius) 
		{
			cout << "Point(" << point.getX() << "," << point.getY() << ")在圆内!" << endl;
		}
		else if (distance > radius) 
		{
			cout << "Point(" << point.getX() << "," << point.getY() << ")在圆外!" << endl;
		}
		else 
		{
			cout << "Point(" << point.getX() << "," << point.getY() << ")在圆上!" << endl;
		}
	}
private:
	Point mP; //圆心
	int mR; //半径
};

void test() {
	//实例化圆对象
	Circle circle;
	circle.setP(20, 20);
	circle.setR(5);
	//实例化点对象
	Point point;
	point.setX(25);
	point.setY(20);

	circle.IsPointInCircle(point);
}
int main()
{
	test();
	return 0;
}

持续更新中,欢迎大家讨论和参考。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值