封装有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;
}
原文链接: https://www.cnblogs.com/-Mr-y/p/7801396.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/262841
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!