C++学习笔记day11-类与对象

1、封装的意义

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

//类的三大特性:封装,继承,多态
const double PI = 3.14;
//设计一个类,求圆的周长
//圆求周长的公式:2*PI*半径
//class代表设计一个类,类后面紧跟着就是类名称
//访问权限有三种:
/*/访问权限:
	1.public    公共权限		成员在类内可以访问,类外也可以访问
	2.protected 保护权限		成员在类内可以访问,类外不可以访问

	3.private   私有权限		成员在类内可以访问,类外不可以访问


*/

class Person
{
public:
	//公共权限
	string m_Name;

protected:
	//保护权限
	string m_Car;

private:
	//私有权限
	int m_Password;

public:
	void func()
	{
		m_Name = "张三";
		m_Car = "Lamborghini";
		m_Password = 123456;

	}
};
class Circle
{
	//访问权限
public:
	//属性
	int m_r;

	//行为

	//获取圆的周长
	double calculateZC()
	{
		return 2 * PI*m_r;
	}

};

//设计一个学生类,属性有姓名和学号
//可以给姓名学号赋值,可以显示学生的姓名和学号
class Student
{
	//公共权限
public:

	//类中的属性和行为我们统一称为成员
	//属性:成员属性,成员变量
	//行为:成员函数,成员方法
	//属性
	string m_name;
	string m_id;
	//行为
	void setName(string name)
	{
		m_name = name;
	}
	void setId(string id)
	{
		m_id = id;
	}
	
	void showStudent()
	{
		cout << "姓名:" << m_name << "学号:" << m_id << endl;
	}
};
int main1()
{
	//通过圆类,创建具体的圆(对象)
	Circle c1;
	//给圆对象的属性进行赋值
	c1.m_r = 10;
	cout << "圆的周长为:" << c1.calculateZC() << endl;
	Student s1;
	s1.setName("张三");
	s1.setId("2015010994");
	s1.showStudent();
	//实例化具体对象
	Person p1;
	p1.m_Name = "李四";
	//p1.m_Car = "BENZ";保护权限内容,在类外访问不到
	//p1.m_Password = 123;私有权限内容,类外访问不到

	p1.func();
	system("pause");
	return 0;
}

//在C++中的struct和class唯一的区别为默认的访问权限不同
//区别:
//struct默认权限为公共
//class默认权限为私有

2、成员属性设置为私有

#include<iostream>
#include<string>
using namespace std;
//成员属性设置为私有
//1、可以自己控制读写权限
//2、对于写可以检测数据的有效性

//设计人类
class Person
{
public:
	//设置姓名
	void setName(string name)
	{
		m_Name = name;
	}
	//获取姓名
	string getName()
	{
		return m_Name;
	}
	//获取年龄 可读可写,如果想修改(年龄的范围必须是0~150之间)

	int getAge()
	{
		//m_Age = 18;
		return m_Age;
	}
	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 main2()
{
	Person p1;
	p1.setName("张三");
	cout << "姓名:" << p1.getName() << endl;
	p1.setAge(10);
	cout << "年龄:" << p1.getAge() << endl;
	/*cout << "年龄:" << p1.setAge(100) << endl;*/
	p1.setLover("Lili");
	//cout<<"情人为:"<<p1.Lover<<endl;//数据不可以访问
	system("pause");
	return 0;
}

3、封装案例–立方体

#include<iostream>
using namespace std;

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

class Cube
{
public:
	//设置长
	void setL(int l)
	{
		m_L = l;
	}
	//获取长

	int getL()
	{
		return m_L;
	}
	//设置宽
	void setW(int l)
	{
		m_W = l;
	}
	//获取宽
	int getW()
	{
		return m_W;
	}
	//设置高
	void setH(int l)
	{
		m_H = l;
	}
	//获取高
	int getH()
	{
		return m_H;
	}

	//获取立方体面积
	int calculateS()
	{
		return 2 * m_L*m_W + 2 * m_L*m_H + 2 * m_W*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;
	}
}

int main3()
{
	//创建立方体对象
	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(10);

	cout << "c2的面积为: " << c2.calculateS() << endl;
	cout << "c2的体积为:" << c2.calculateV() << endl;
	//全局函数判断
	bool ret = isSame(c1, c2);
	if (ret)
	{
		cout << "c1和c2是相等的" << endl;
	}
	else
	{
		cout << "c1和c2是不相等的" << endl;
	}

	//利用成员函数判断
	bool ret2 = c1.isSameByClass(c2);
	if (ret2)
	{
		cout <<"成员函数判断:"<< "c1和c2是相等的" << endl;
	}
	else
	{
		cout <<"成员函数判断: "<<"c1和c2是不相等的" << endl;
	}
	system("pause");
	return 0;

}

4、案例2–点和圆的关系
1)Point.h

#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:
	int m_X;
	int m_Y;
};
  1. Point.cpp
#include"point.h"

//设置x
void Point::setX(int x)
{
	m_X = x;

}
//获取x
int Point::getX()
{
	return m_X;
}

//设置Y
void Point::setY(int Y)
{
	m_Y = Y;

}
//获取Y
int Point::getY()
{
	return m_Y;
}

  1. circle.h
#pragma once
#include<iostream>
#include"point.h"
using namespace std;

//圆类
class Circle
{
public:
	//设置半径
	void setR(int r);
	
	//获取半径
	int getR();
	
	//设置圆心
	void setCenter(Point center);
	

	//获取圆心
	Point getCenter();

private:
	int m_R;//半径

	//在类中可以让另一个类作为本类中的成员 
	Point m_Center;//圆心
};

  1. 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;
}

  1. main函数
#include<iostream>
#include"circle.h"
#include"point.h"
using namespace std;

//点和圆关系案例

//点类

//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(9);
	//判断关系
	isInCircle(c, p);

	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值