[C++核心编程](四):类和对象——封装
目录
封装
访问权限
struct和class的区别
成员属性设置为私有
设计案例
C++面向对象的三大特性:封装、继承、多态
C++认为万事万物皆为对象,对象上有其属性和行为!!
封装
意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制 语法:class 类名 { 访问权限 : 属性 / 行为} ;
#include <iostream>
using namespace std;const double PI = 3.14;
//设计一个圆类,求圆的周长 2 * PI * 半径class Cirle
{//访问权限
public://属性int m_R;//行为double calculate(){return 2 * PI * m_R;}
} ;int main(void)
{Cirle mcirle;mcirle.m_R = 10;cout << "圆周长:" << mcirle.calculate() << endl;return 0;
}
访问权限
权限 | 关键词 | 说明 |
公共权限 | public | 类内可以访问 类外可以访问 |
保护权限 | protected | 类内可以访问 类外不可以访问 子类可以访问父类 |
私有权限 | private | 类内可以访问 类外不可以访问 子类不能访问父类 |
struct和class的区别
唯一区别:默认的访问权限不同,struct为公有,class为私有
成员属性设置为私有
优点:
- 自行控制读写权限
- 对于写权限,可以检测数据的有效性
设计案例
#include <iostream>using namespace std;//立方体类(m_L m_H m_W),求出其面积和体积,分别用全局函数和成员函数判断两个立方体是否相等
class Cube
{
private:int m_L;int m_H;int m_W;
public:void set_cube_L(int Lvalue){m_L = Lvalue;}int get_cube_L(void){return m_L;}void set_cube_H(int Hvalue){m_H = Hvalue;}int get_cube_H(void){return m_H;}void set_cube_W(int Wvalue){m_W = Wvalue;}int get_cube_W(void){return m_W;}int calculate_S() //面积{return 2 * m_L * m_W + 2 * m_W * m_H + 2 * m_L * m_H;}int calculate_V() // 体积{return m_L * m_H * m_W;}void isSameByClass(Cube &c){if (get_cube_H() == c.get_cube_H() && get_cube_W() == c.get_cube_W() && get_cube_L() == c.get_cube_L()){cout << "成员函数判断:c1 and c2 相等" << endl;}else{cout << "成员函数判断:c1 and c2 不相等" << endl;}}
};//全局函数判断两个立方体是否相等
void isSame(Cube& c1, Cube& c2)
{if (c1.get_cube_H() == c2.get_cube_H() && c1.get_cube_W() == c2.get_cube_W() && c1.get_cube_L() == c2.get_cube_L()){cout << "全局函数判断:c1 and c2 相等" << endl;}else{cout << "全局函数判断:c1 and c2 不相等" << endl;}
}int main(void)
{Cube c1, c2;c1.set_cube_H(10);c1.set_cube_L(10);c1.set_cube_W(10);c2.set_cube_H(10);c2.set_cube_L(10);c2.set_cube_W(10);cout << "c1的面积是:" << c1.calculate_S() << endl;cout << "c1的体积是:" << c1.calculate_V() << endl;isSame(c1, c2);c1.isSameByClass(c2);system("pause");return 0;
}
推荐阅读:[C++核心编程](三):函数高级