#include<iostream>
using namespace std;//标注空间
#include<string>
#include<time.h>
#include<cstdlib>
//C++当中面向对象三大特性:封装、继承、多态
//C++当中万事万物都能作为对象!作为对象有- 属性
//封装:意义-----一:将属性和行为作为一个整体来表现生活当中的事物;二:将属性和行为加以权限控制
//一:语法 class 类名 {访问权限:属性/行为}; ---(类当中的属性和行为统一称为: 成员!!!!!
//属性-----成员属性/成员变量!!!!!
//行为-----成员函数/成员方法!!!!!
// 设计一个圆类 求圆的周长!(公式:2*π*r)(r半径是可以作为圆的一个 属性)
//const double PI = 3.14;//π=PI=3.14设计一个常量
//
//class Circle //设计一个类 class 类名
//{
// //访问权限!!!!!
//public: //公共服务权限
//
// //圆的属性(属性通常是一些变量)!!!!!
// int m_r;//半径
//
// //圆的行为(比如这个是:获取圆的周长)(行为通常用函数来获取)!!!!!
// double Circlezhouchang()
// {
// return 2 * PI*m_r;//返回周长通常作为一个行为 !行为通常用函数作为一个表达!
// }
//
//};
//int main()
//{
// //通过所创建的类 来创建具体的对象 -通过创建的圆类 来创建具体的圆(对象) 这个通过类来创建对象叫-实例化!!!!!
// Circle c1;//类名 对象名; 创建对象
//
// //给圆 对象 属性来进行具体的赋值操作!
// c1.m_r = 10;//对象名.属性=所赋的值;
//
// cout << "圆的周长为: " << c1.Circlezhouchang() << endl;//对象名.行为函数() 即获取行为
//
// system("pause");
// return 0;
//}
//设计一个学生类:属性有姓名、学号;可以给姓名学号赋值,可以显示姓名、学号
//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_Name = "张三";
// s1.m_ID = 01;
// //显示学生信息
// s1.showStudent();//相当于调用函数!显示信息
//
// Student s2;
// s2.m_Name = "理事";
// s2.m_ID = 02;
// s2.showStudent();
//
// Student s3;
// s3.setName("王五");//调用函数然后传入数值给与属性赋值!!!!!通过行为给属性进行赋值操作!!!!!
// s3.m_ID = 03;
// s3.showStudent();
//
// Student s4;
// s4.setName("赵六");
// s4.setID(04);
// s4.showStudent();
//
// system("pause");
// return 0;
//}
//二: 访问权限 在设计类时常常会把属性和行为放在不同的权限下进行控制和管理:public- 公共权限 ;protected- 保护权限 ;private- 私有权限;
//public 公共权限 成员 类内(在类里面{})可以访问 类外可以访问
//protested 保护权限 成员 类内可以访问 类外不可以访问-继承当中父子子类可以访问父类
//private 私有权限 成员 类内可以访问 类外不可以访问-子类不能访问父类内容
//class Person
//{
// //公共权限
//public:
// string m_Name;
// //保护权限
//protected:
// string m_Car;
// //私有权限
//private:
// int m_password;
//
//public:
// void func()
// {//在类里面可以访问:
// m_Name = "张三";
// m_Car = "大众";
// m_password = 1111111;
// }
//
//};
//int main()
//{
// //在类外
// //实例化具体对象出来
// Person p1;
// p1.m_Name = "王五";
// //p1.m_Car = "大奔";//报错:保护权限在类外是不能被访问的!!!!!
// //p1.m_password = 123456789;//报错同上
// system("pause");
// return 0;
//}
//struct 和 class:默认访问的权限不同 :calss:默认私有(private) struct:默认共有(public)
//class C1
//{
// int m_A;//默认权限 私有
//
//};
//struct C2
//{
// int m_B;//默认权限 共有
//};
//int main()
//{
// C1 c1;
// //c1.m_A = 100;//报错 私有是不能访问的
// C2 c2;
// c2.m_B = 100;//共有权限是可以访问的
// system("pause");
// return 0;
//}
//将成员属性设置为 私有(可以控制写读权限;对于写程序可以检测数据的有效性)
//class Person
//{
//public:
// //写(设置)姓名
// void setName(string name)//对 外提供一个成员函数来进行赋值操作!!!!!
// {
// m_Name = name;//只有在类的内部才能进行赋值操作!!!!!
// }
// //读(获取)姓名
// string getName()
// {
// return m_Name;
// }
//
// //获取年龄-可读可写 想修改(年龄范围0~120)
// int getAge()
// {
// m_Age = 10;//初始化赋值为10岁
// return m_Age;
// }
// //设置年龄
// void setAge(int age)
// {
// if (age < 0 || age>120)
// {
// cout << "显示错误"<<endl;
// return;
// }
// m_Age = age;
// }
//
// //只写 设置爱人
// void setLove(string lover)
// {
// m_Lover = lover;
// }
//
//private://通常把属性设置为私有会对外再设置public接口来对属性进行读写操作
// string m_Name;//姓名-可读可写
// int m_Age;//年龄-只读
// string m_Lover;//爱人-只写
//};
//
//int main()
//{
// Person p;
// p.setName("张三");//相当于通过函数来赋值
// cout << " 姓名是: " << p.getName() << endl;//读姓名
// p.setAge(50);
// cout << " 年龄是: " << p.getAge()<<endl;
// p.setLove("王五");
//
// system("pause");
// return 0;
//}
//案例一:设计立方体类(Cube) ;求出立方体面积和体积 ;分别用全局函数和成员函数判断两个立方体是否相等
//class Cube
//{
//private:
// //属性-尽量设置为私有!
// //长
// int m_L;
// //宽
// int m_W;
// //高
// int m_H;
//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;
// }
// else
// {
// return false;
// }
// }
//};
//
////利用全局函数判断两个立方体是否相等
//bool isSame(Cube &c1,Cube &c2)//引用传递!
//{
// if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH())
// {
// return true;
// }
// else
// {
// return false;
// }
//
//}
//int main()
//{
// Cube c1;//创建立方体c1
// c1.setL(10);
// c1.setW(10);
// c1.setH(10);
//
// cout << "c1的面积为: " << c1.calculateS() << endl;
// cout << "c1的体积为: " << c1.calculateV() << endl;
//
// Cube c2;//创建立方体c2
// c2.setL(10);
// c2.setW(10);
// c2.setH(10);
//
// cout << "c2的面积为: " << c1.calculateS() << endl;
// cout << "c2的体积为: " << c1.calculateV() << endl;
//
// //函数判断是否相等
// bool ret = isSame(c1, c2);//引用传递!
// if (ret)
// {
// cout << "c1和c2 是!相等的两个立方体!-ret1判断" << endl;
// }
// else
// {
// cout << "c1和c2 不是!相等的两个立方体!-ret1判断" << endl;
// }
//
// //利用成员函数判断是否相等两个立方体
// int ret2 = c1.isSamebyclass(c2);
// if (ret2)
// {
// cout << "c1和c2 是!相等的两个立方体!-ret2判断" << endl;
// }
// else
// {
// cout << "c1和c2 不是!相等的两个立方体!-ret2判断" << endl;
// }
//
// system("pause");
// return 0;
//}
//案例二:设计一个圆类(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;//x坐标
int m_Y;//y坐标
};class Circle
{
public:
//设置半径
void setR(int r)
{
m_R = r;
};
//获取半径
int getR()
{
return m_R;
};
//设置圆心
void setCenter(Point center)//传入的是一个点!所以是Point类
{
m_Center = center;
};
//获取圆心
Point getCenter()//返回Point类!!!!!
{
return m_Center;
};private:
int m_R;
Point m_Center;//圆心(因为是一个点 所以用点类)---在类当中可以让别的类成为本来类的核心成员!!!!!
};//判断点和圆的关系函数
void isInCircle(Circle &c,Point &p)//需要传入一个圆 和一个 点 用引用!!!!!
{
//计算两点之间距离的^2
int dsitance = (c.getCenter().getX() - p.getX())(c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY())(c.getCenter().getY() - p.getY());
//(x1-x2)2+(y1-y2)2
//计算m_R^2
int rDistance = c.getR()*c.getR();
//判断关系
if (dsitance == rDistance)
{
cout << "点在圆上!" << endl;
}
else if (dsitance > rDistance)
{
cout << "点在圆外!" << endl;
}
else
{
cout << "点在圆内!" << endl;
}
}
int main()
{
//创建圆
Circle c1;
c1.setR(1);
Point center;//设置圆心坐标!
center.setX(1);
center.setY(1);
c1.setCenter(center);//放入圆心!
//创建点
Point p1;
p1.setX(1);
p1.setY(1);
//判断关系
isInCircle(c1, p1);
system("pause");
return 0;}