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;
}