4 类和对象
C++面向对象的三大特性为:==封装、继承、多态==
C++认为==万事万物都皆为对象==,对象上有其属性和行为
4.1 封装
4.1.1 封装的意义
封装是C++面向对象三大特性之一
封装的意义:
将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制
-封装意义一:
- 在设计类的时候,属性和行为写在一起,表现事物
语法: class 类名{ 访问权限: 属性 / 行为 };
//学生类 class Student { public: void setName(string name) { m_name = name; } void setID(int id) { m_id = id; }void showStudent() { cout << "name:" << m_name << " ID:" << m_id << endl; }public: string m_name; int m_id; };
int main() {
Student stu; stu.setName("德玛西亚"); stu.setID(250); stu.showStudent(); system("pause"); return 0;
}
封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
- public 公共权限 类内可以访问 类外可以访问
- protected 保护权限 类内可以访问 类外不可以访问 儿子可以访问父亲中的保护内容
- private 私有权限 类内可以访问 类外不可以访问 儿子不可以访问父亲中的私有内容
4.1.2 struct和class区别
在C++中 struct和class唯一的区别就在于 默认的访问权限不同
区别:
struct 默认权限为公共 class 默认权限为私有
4.1.3 成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
立方体封装
设计立方体类(Cube) 求出立方体的面积和体积 分别用全局函数和成员函数判断两个立方体是否相等。
#include <iostream> using namespace std; #include <string>template <typename T> class lifangti { private: T m_h; T m_l; T m_w; public: void set_m_h(T f1) { m_h = f1; } T get_m_h() { return m_h; } void set_m_l(T f1) { m_l = f1; } T get_m_l() { return m_l; } void set_m_w(T f1) { m_w = f1; } T get_m_w() { return m_w; } T get_v() { T v = m_hm_lm_w; return v; } bool issame(lifangti &l1) //成员函数判断 { if (l1.get_m_h() == m_h && l1.get_m_l() == m_l && l1.get_m_w() == m_w) { return true; } else { return false; }
}};
bool issame(lifangti &l1, lifangti &l2) //全局函数判断 { if (l1.get_m_h() == l2.get_m_h() && l1.get_m_l() == l2.get_m_l() && l1.get_m_w() == l2.get_m_w()) { return true; } else { return false; }
} T main(T argc, char const *argv[]) { lifangti l1; l1.set_m_h(10); l1.set_m_l(10); l1.set_m_w(10); cout << l1.get_v() << endl; lifangti l2; l2.set_m_h(10); l2.set_m_l(10); l2.set_m_w(10); if (issame(l1, l2)) { cout << “1yang” <<endl; } cout << l1.issame(l2) << endl;
return 0;
}