目录
类的封装
类的访问控制
struct和class关键字的区别
总体代码
类的封装
以求圆的面积为例,来演示一下类的封装。
class MyCircle
{
public:double m_r; //属性 成员变量double m_s;public:double getR(){return m_r;}void setR(double r) //成员函数{m_r = r;}double getS(){m_s = 3.14*m_r*m_r;return m_s;}
protected:
private:
};
类的封装
封装(Encapsulation)
A)封装,是面向对象程序设计最基本的特性。把数据(属性)和函数(操作)合成一个整体,这在计算机世界中是用类与对象实现的。
B)封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
备注:有2层含义(把属性和方法进行封装 对属性和方法进行访问控制)
C++中类的封装
成员变量,C++中用于表示类属性的变量
成员函数,C++中用于表示类行为的函数
下面看看封装的威力:
void printCircle01(MyCircle *pC)
{cout<<"r"<<pC->getR()<<endl;cout<<"s"<<pC->getS()<<endl;
}void printCircle02(MyCircle &myc)
{cout<<myc.getS()<<endl;
}void printCircle03(MyCircle myc)
{}
void main_类的封装第一层含有()
{MyCircle c1, c2;c1.setR(10);cout<<"c1 s: "<<c1.getS()<<endl;c1.setR(11);printCircle01(&c1);c2.setR(20);printCircle01(&c2);//引用printCircle02(c2);cout<<"hello...."<<endl;system("pause");
}
不但可以调用类的属性,而且可以掉类的方法,这是因为类封装了成员变量和成员函数,这就比简单的C语言的结构体要好的多。
类的访问控制
访问控制:我可以让想被访问的东西露出来,让不想被访问的东西给隐藏,即公共,私有,保护(类的访问控制关键字)。
注意区分类的内部与外部。在class里面的,为类的内部,在类之外的为外部。
public: 修饰的成员变量和函数 可以在类的内部和类的外部访问。
private: 修饰的成员变量和函数只能在类的内部被访问,不能在类的外部访问。
protected: 修饰的成员变量和函数只能在类的内部被访问,不能在类的外部访问, 但有个特例,即用在继承里面。
class MyAdvCircle
{
private:double m_r2; //没有权限修饰的成员变量 函数 是 默认是私有属性private:double m_r; //属性 成员变量double m_s; //相当于你的银行卡密码public:double getR() //你的名字{return m_r;}void setR(double r) //成员函数{m_r = r;}double getS(){m_s = 3.14*m_r*m_r;return m_s;}
};void main_02()
{MyAdvCircle c1, c2;//c1.m_r = 10; //无法访问c1.setR(10);system("pause");
}
如果类外部的属性去操作类时,如果类的属性是私有的,就不能达成,如果是公有的,就可以。另外,没有权限修饰的成员变量及函数默认是私有属性的。
struct和class关键字的区别
在用struct定义类时,所有成员的默认属性为public
在用class定义类时,所有成员的默认属性为private
struct AAA
{int a; //用struct关键字定义的类,不写,默认属性是public的.//class privatepublic:
protected:
private:
};void main()
{AAA a1;a1.a = 11;system("pause");
}
struct 没有特别声明,默认都是public的。
总体代码
dm01_类的封装.cpp
#include "iostream"using namespace std;//求圆形的面积
//封装有2层含义
//1 把属性和方法进行封装
//2 对属性和方法进行访问控制//3 类的内部和类的外部//4 类的访问控制关键字
//public: 修饰的成员变量和函数 可以在类的内部和类的外部访问
//private: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问
//protected: 修饰的成员变量和函数 只能在类的内部被访问,不能在类的外部访问, 用在继承里面class MyCircle
{
public:double m_r; //属性 成员变量double m_s;public:double getR(){return m_r;}void setR(double r) //成员函数{m_r = r;}double getS(){m_s = 3.14*m_r*m_r;return m_s;}
protected:
private:
};//类的封装的威力
//类封装的成员变量和成员函数 //可以调用类的成员函数
void printCircle01(MyCircle *pC)
{cout<<"r"<<pC->getR()<<endl;cout<<"s"<<pC->getS()<<endl;
}void printCircle02(MyCircle &myc)
{cout<<myc.getS()<<endl;
}void printCircle03(MyCircle myc)
{}
void main_类的封装第一层含有()
{MyCircle c1, c2;c1.setR(10);cout<<"c1 s: "<<c1.getS()<<endl;c1.setR(11);printCircle01(&c1);c2.setR(20);printCircle01(&c2);//引用printCircle02(c2);cout<<"hello...."<<endl;system("pause");
}class MyAdvCircle
{
private:double m_r2; //没有权限修饰的成员变量 函数 是 默认是私有属性private:double m_r; //属性 成员变量double m_s; //相当于你的银行卡密码public:double getR() //你的名字{return m_r;}void setR(double r) //成员函数{m_r = r;}double getS(){m_s = 3.14*m_r*m_r;return m_s;}
};void main_02()
{MyAdvCircle c1, c2;//c1.m_r = 10; c1.setR(10);system("pause");
}struct AAA
{int a; //用struct关键字定义的类,不写,默认属性是public的.//class privatepublic:
protected:
private:
};void main()
{AAA a1;a1.a = 11;system("pause");
}