封装有2层含义
1 把属性(数据和变量)和方法(函数和操作)进行封装
2 对属性和方法进行访问控制
3 类的内部和类的外部
4 类的访问控制关键字
public: 修饰的成员变量和函数 可以在类的内部和类的外部访问
private: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问
protected: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问, 用在继承里面
5.用struct关键字定义的类,不写,默认属性是public的.
用class关键字定义的类,不写,默认属性是private的
调用成员函数而非全局函数来判断
总结:C里我们如果要实现两个相同类型的对比,则要调用俩次相同的函数来实现,
而C++使用了类后,先将这种类型抽象出来,然后直接调用成员函数就可以实现
// 案例1 设计立方体类(cube),求出立方体的面积和体积 // 求两个立方体,是否相等(全局函数和成员函数) #include <iostream> using namespace std; class Cube { public: //设置和返回ABC void setA(int a) { m_a = a; } void setB(int b) { m_b = b; } void setC(int c) { m_c = c; } void setABC(int a=0, int b=0, int c=0) { m_a = a; m_b = b; m_c = c; } int getA() { return m_a; } int getB() { return m_b; } int getC() { return m_c; } public://返回V S int getV() { m_v = m_a*m_b*m_c; return m_v; } int getS() { m_s = 2*(m_a*m_b + m_a*m_c + m_b*m_c); return m_s; } int judgeCube(Cube &v1, Cube &v2) //3k { if ( (v1.getA() == v2.getA()) && (v1.getB() == v2.getB()) && (v1.getC() == v2.getC()) ) { return 1; } else { return 0; } } int judgeCube(Cube &v2) //成员函数 函数重载 //4k { //Q:好多人 分不清 这个场景下的m_a 是属于v1 还是 属于v2 //A:自然属于v1,这里只是引用了v2,实则还是在v1里 if ( (this->m_a == v2.getA()) && (this->m_b == v2.getB()) && (this->m_c == v2.getC()) ) { return 1; } else { return 0; } return 0; } private: int m_a; int m_b; int m_c; int m_v; int m_s; }; //全局函数 //1相等 0不相等 int judgeCube(Cube &v1, Cube &v2) { if ( (v1.getA() == v2.getA()) && (v1.getB() == v2.getB()) && (v1.getC() == v2.getC()) ) { return 1; } else { return 0; } } /**************************************** * 全局函数调用 *****************************************/ int main01() { Cube v1, v2; v1.setABC(1, 2, 3); cout<<v1.getS()<<endl; cout<<v1.getV()<<endl; cout<<"hello..."<<endl; v2.setABC(1,2,4); //判断两个立方体是否相等 if (judgeCube(v1, v2) == 1) { cout<<"相等"<<endl; } else { cout<<"不相等"<<endl; } return 0; } /**************************************** * 成员函数调用 *****************************************/ int main() { Cube v1, v2; v1.setABC(1, 2, 3); cout<<v1.getS()<<endl; cout<<v1.getV()<<endl; cout<<"hello..."<<endl; v2.setABC(1,2,4); //函数调用 意味着: 去执行 v1对象的类的成员judgeCube int tag = v1.judgeCube(v2); //判断v1立方体 和 v2立方体是否相等 ,通过类的成员函数 if ( tag == 1 ) { cout<<"相等"<<endl; } else { cout<<"不相等"<<endl; } //判断两个立方体是否相等 if ( v1.judgeCube(v1, v2) == 1) { cout<<"相等"<<endl; } else { cout<<"不相等"<<endl; } return 0; }