4 类和对象
面向对象三大特性:封装、继承、多态
万物皆对象。对象= 属性+行为 类是抽象的对象。 比如路上有很多(具体的)车,但抽象出来都属于车。
定义类的语法:
class 类名 { 访问权限: 属性; 行为; };
4.1 封装
封装意义:
结合属性和行为,符合现实。
权限控制
圆类
const double PI 3.1415; class Circle { public: //访问权限 //属性 int m_r; //半径 //行为 double cal_circumference() { return 2 * PI * m_r; } }; //使用类 int main(){ Circle c1; c1.m_r = 10; cout << c1.cal_circumference() << endl; }
4.1.1 权限控制
权限控制是封装的另一个意义。 访问权限有三种 public 公开 protected 保护 (子类可以访问父类的保护内容,具体看后面的继承) private 私有 (子类不可以访问父类的私有内容)
只有公开的成员才能类外访问。 例:
class Person { public : string m_Name; protected: string m_Car; private: int m_Password; public: void func() { m_Name = "张三"; m_Car = "拖拉机"; m_Password = 123456; } }; int main() { Person p; p.m_Name = "李四"; p.m_Car = "五菱"// 错误,类外不能访问protected和private成员 }
4.1.2 struct 和 class
struct 成员默认是public class 成员默认是private
4.1.3 成员属性设置为私有
成员属性设置为private, 提供public接口,通过set和get方法设置和获取属性。 除了权限控制外,可以在set和get方法中对属性有效性进行验证。
如:
class Person { public: void set_name(string name){ m_Name = name; } void get_name(){ return m_Name; } private: string m_Name; }
案例,设计立方体,属性(H,W,L)、方法;分别利用全局函数和成员函数判断相等。