C++面向对象的三大特性:封装、继承、多态
C++认为万事万物都可以为对象,对象上有其属性和行为
具有相同性质的对象,可以抽象为类
1. 封装的意义
封装是C++面向对象三大特性之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以控制
- 封装意义一:
在设计类的时候,属性和行为写在一起,表现事物
语法:class 类名{访问权限:属性 / 行为};
示例1:设计一个圆类,求圆的周长
#include<iostream> using namespace std; //圆周率 const double PI = 3.14; //设计一个圆类,求圆的周长 //圆求周长的公式:2*PI*半径 class Circle{ //访问权限 public: //属性 int m_r; //行为 //获取圆的周长 double calculateZC(){ return 2*PI*m_r; } }; int main(){ //通过圆类创建具体的圆 Circle c1; c1.m_r = 10; cout << "圆的周长为:" << c1.calculateZC() << endl; return 0; }
示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
#include<iostream> #include<string> using namespace std; class Student{ //访问权限 public: string s_name; string s_id; void showStudent(){ cout << "姓名:" << s_name << "\n学号:" << s_id << endl; } void setName(string name){ s_name = name; } }; int main(){ //实例化对象 Student s1; //s1.s_name = "张三"; s1.setName("张三"); s1.s_id = "001"; s1.showStudent(); Student s2; s2.s_name = "李四"; s2.s_id = "002"; s2.showStudent(); return 0; }
- 封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
- public 公共权限
- protected 保护权限
- private 私有权限
#include<iostream> #include<string> using namespace std; // 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 p1; p1.m_Name = "李四"; //p1.m_car = "宝马"; //p1.m_Password = 123; return 0; }
2. struct和class区别
在C++中struct和class唯一的区别就在于默认的访问权限不同
区别:
- struct默认权限为公共
- class默认权限为私有
#include<iostream> #include<string> using namespace std; class C1{ int m_A; }; struct C2{ int m_A; }; int main(){ C1 c1; //c1.m_A = 100; C2 c2; c2.m_A = 200; return 0; }
3. 成员属性设置为私有
优点1:将成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
#include<iostream> #include<string> using namespace std; class Person{ public: //写姓名 void setName(string name){ m_Name = name; } //读姓名 string getName(){ return m_Name; } //读年龄 int getAge(){ return m_Age; } //写年龄————————有效性验证 void setAge(int age){ if(age < 0 || age > 150){ cout << "年龄范围错误" << endl; return ; } m_Age = age; } //写爱人 void setLover(string name){ m_Lover = "NoBody"; } private: string m_Name; //姓名 可读可写 int m_Age = 20; //可读可写,但范围必须在0~150之间 string m_Lover; //只写 }; int main(){ Person p; p.setName("张三"); cout << "姓名为:" << p.getName() << endl; return 0; }
来源:https://www.cnblogs.com/maeryouyou/p/12008175.html