C++学习之类和对象基本概念
目录
1.圆类案例
2.学生类案例
3.封装_C语言下的封装
4.C++语言下的封装
5.封装的访问权限
6.成员私有化
7.立方体案例
8.点和圆关系案例
1.圆类案例
案例需求: 设计一个圆类,求圆的周长? 思考: 求圆的周长需要圆的哪些信息 提示: 周长公式: 2 * π * r
类的设计: C++中将万事万物都抽象成对象,比如你眼前的鼠标、键盘、电脑、显示器、桌子、水杯... 当然一个圆也可以是一个对象,而多个圆可以统称为圆类 在理解时可以把对象理解为具体的东西,将这些具体的东西抽象出来,就是类 圆类设计: 对于求圆周长,我们知道每个圆都有他的半径,这个半径属于圆类的属性,而求周长还是面积,属于一个行为,需要通过公式才能够求出。因此可以设计圆类的属性为半径,行为为求周长
声明类的语法: class + 类名{ } ; 举例:圆类 class Circle { }; 类内的属性和行为:大括号内实现的内容,具体实现如下 class Circle { public: //访问权限,公共权限 double getZC( ){ return 2 * 3.14 * m_R; } //求周长,行为 int m_R; //半径,属性 };
2.学生类案例
案例需求: 设计一个学生类,属性有学生的姓名、学号,类内部可以给学生的姓名和学号赋值,并提供获取学生姓名和学号的方法,以及展示学生整体信息的方法 思考: 设计学生类时有哪些属性、哪些行为
声明学生类: class + Student{ } ; 属性: string m_Name; //学生姓名 int m_Id; //学生学号 行为: void setName(string name){ ... } //设置姓名 string getName(){ ... } //获取姓名 void setId(int Id){ ... } //设置学号 int getId(){ ... } //获取学号 void showInfo(){ ... } //显示学生整体信息 主函数: 创建学生对象、给学生信息赋值、并展示
3.封装_C语言下的封装
案例需求: 设计人的结构体,结构体中有人的姓名属性,设计全局函数personEat,参数为人的结构体指针,函数内部输出人的姓名以及人吃饭的行为。 设计狗的结构体,结构体中有狗的姓名属性,设计全局函数dogEat,参数为狗的结构体指针,函数内部输出狗的姓名以及狗吃饭的行为。 测试函数中创建人和狗分别调用其吃饭的行为
人结构体的设计: struct Person{ char m_Name[64]; }; 人吃饭的行为: personEat(struct Person * p) { ... } 狗结构体的设计: struct Dog{ char m_Name[64]; }; 狗吃饭的行为: dogEat(struct Dog * dog) { ... }
4.C++语言下的封装
案例需求: 设计人的结构体,结构体中有人的姓名属性,还有人吃饭函数,函数内部输出人的姓名以及人吃饭的行为。 设计狗的结构体,结构体中有狗的姓名属性,还有狗吃饭函数,函数内部输出狗的姓名以及狗吃饭的行为。 测试函数中创建人和狗分别调用其吃饭的行为
人结构体的设计: struct Person{ char m_Name[64]; personEat() { ... } }; 狗结构体的设计: struct Dog{ char m_Name[64]; dogEat() { ... } };
5.封装的访问权限
C++中的三种访问权限: public 公共权限 protected 保护权限 private 私有权限 具体区别: public 权限: 类中的成员在类内可以访问,在类外也可以访问 protected 权限: 类中的成员在类内可以访问,在类外不可以访问 private权限: 类中的成员在类内可以访问,在类外不可以访问 注:protected 和private权限的区别,在继承中才可以体现出来,目前的结论的一样的
6.成员私有化
设计一个Person类,其中有三个属性: string m_Name; //姓名 int m_Age; //年龄 string m_Idol; //偶像 将这三个属性进行私有化,然后将姓名设置为可读可写,年龄设置为只读,默认18,偶像设置为只写
7.立方体案例
设计一个Person类,其中有三个属性: string m_Name; //姓名 int m_Age; //年龄 string m_Idol; //偶像 将这三个属性进行私有化,然后将姓名设置为可读可写,年龄设置为只读,默认18,偶像设置为只写
8.点和圆关系案例
需求: 设计一个圆类(Circle),和一个点类(Point),计算点和圆的关系。 假如圆心坐标为x1, y1, 半径为m_R,点的坐标为x2, y2: 点在圆上:(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) == m_R*m_R 点在圆内:(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) < m_R*m_R 点在圆外:(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) > m_R*m_R 测试时创建圆和点对象, 分别用全局函数和成员函数判断点和圆的关系