C++基础 类和对象

本文介绍了C++中的面向对象编程特性,包括封装、继承和多态的概念。通过实例讲解了如何实现类的封装,使用private和public控制成员变量的访问权限,并展示了如何设计具有封装特性的点、圆类。此外,还讨论了结构体struct与类class的区别,以及如何判断点与圆的位置关系。
摘要由CSDN通过智能技术生成
/*
* B站学习--[99 - ]
* day11 学习成果
*/

/* 
 * 4 类和对象 
 * 
 * C++面向对象的三大特征为:封装、继承、多态
 * 
 * 
 * 4.1 封装
 * 
 * 意义:1.将属性和行为作为一个整体,表现生活中的事物;
 *		 2.将属性和行为加以权限控制;
 * 
 * 语法:class 类名{	访问权限; 属性 / 行为	};
 * 
 * 
 * 封装意义二:
 *		类在设计时,可以吧属性和行为放在不同的权限下,加以控制。
 * 
 * 访问权限有三种:
 *		2.protected	保护权限	类内可以访问 类外不可以访问 子类可以访问父类的保护内容
 *		3.private	私有权限	雷内可以访问 类外不可以访问 子类不可以访问父类的私有内容
 * 
 * 
 * 4.1.2 struct和class的区别
 * 
 * 唯一区别:默认的访问权限不同
 * 
 * struct 默认权限是共有public		class 默认权限为私有private,类外不可访问
 * 
 * 
 * 4.1.3 成员属性设置为私有
 * 
 * 优点1:将所有成员属性设置为私有,可以自己控制读写权限;
 * 优点2:对于写权限,我们可以检测数据的有效性。
 * 
 * 设置set...(){} 和 get...(){}
 * 
 * 
 * 4.1.4 点与圆的关系
 * 
 * 
 * 
 * 
 */


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

const double PI = 3.14;

//设计一个圆类,求圆的周长
class Circle1 {
public :
	double radius = 1;

	double calculate() {
		return 2 * PI * radius;
	}

};

class Student {
private:	//公共权限

	string name;
	int number;

public:
	void setName(string name) {
		this->name = name;
	}

	void setNumber(int number) {
		this->number = number;
	}

	void printInformation() {
		cout << "姓名:" << this->name << endl;
		cout << "学号:" << this->number << endl;
	}
};


//访问权限
class person {
public:	//公共权限
	string m_Name;	//姓名

protected: //保护权限
	string m_Car;	//汽车

private: //私有权限
	int m_Password;	//银行卡密码

public:
	void func() {
		m_Name = "张三";
		m_Car = "拖拉机";
		m_Password = 123456;
	}

};

class Cube {
private:
	double length = 0;
	double width = 0;
	double height = 0;

public:
	void setLength(int length) {
		this->length = length;
	}

	void setWidth(int width) {
		this->width = width;
	}

	void setHeight(int height) {
		this->height = height;
	}
	
	double getLength() {
		return this->length;
	}

	double getWidth() {
		return this->width;
	}

	double getHeight() {
		return this->height;
	}

	double getArea() {
		return 2 * (length * width + length * height + width * height);
	}

	double getVolume() {
		return length * width * height;
	}

	bool equals(Cube& c2) {
		if(height == c2.getHeight()
			&& length== c2.getLength()
			&& width== c2.getWidth()) {
			return true;
		}
		else {
			return false;
		}
	}
};

bool isEquals(Cube& c1,Cube &c2) {
	if (c1.getHeight() == c2.getHeight()
		&& c1.getLength() == c2.getLength()
		&& c1.getWidth() == c2.getWidth() ) {
		return true;
	}
	else{
		return false;
	}
}


//点与圆的位置关系

//点类
class Point {
private:
	int X;
	int Y;

public:
	void setX(int X) {
		this->X = X;
	}

	int getX() {
		return this->X;
	}

	void setY(int Y) {
		this->Y = Y;
	}

	int getY() {
		return this->Y;
	}

	int getDistance() {
		return 0;
	}
};

//圆类
class Circle {
private:
	int radius;

	Point center;

public:
	void setCenter(Point p) {
		this->center = p;
	}

	void setRadius(int radius) {
		this->radius = radius;
	}

	Point getCenter() {
		return center;
	}

	int getRadius() {
		return radius;
	}
};

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.getRadius() * c.getRadius();

	//判断关系
	if(distance == rDistance){
		cout << "点在圆上" << endl;
	}
	else if(distance > rDistance){
		cout << "点在圆外" << endl;
	}
	else {
		cout << "点在圆内" << endl;
	}
}






int main12() {

	//创建对象
	//实例化 [通过一个类 创建一个对象的过程]
	//Circle c1;
	//c1.radius = 10;
	//cout << "圆的周长为; " << c1.calculate() << endl;

	//Student s1;
	//s1.setName("Lisi");
	//s1.setNumber(211);
	//s1.printInformation();
	
	//Cube c1;
	//c1.setLength(10);
	//c1.setWidth(10);
	//c1.setHeight(10);
	
	//cout << "c1的表面积为:" << c1.getArea() << endl;
	//cout << "c1的体积为:" << c1.getVolume() << endl;

	//Cube c2;
	//c2.setLength(10);
	//c2.setWidth(10);
	//c2.setHeight(10);

	//cout << "c1与c2是否相等:" << isEquals(c1, c2) << endl;
	//cout << "c1与c2是否相等:" << c1.equals(c2) << endl;


	//创建圆
	Circle c;
	c.setRadius(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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值