1。类本身提供了与外界隔离,数据保护,封装性
即除了成员函数,程序并无法对于其私有成员进行访问,修改
2。在引入继承层次之后,在派生类的内部(它含有一个 基类对象组成部分,之所以叫 组成部分,因为它不独 立,之所以叫它 部分, 因为它本身又维护了一个小范围的封装性,数据保护)
3。派生类继承了基类的所有成员,即使基类的私有成员,也是派生类对象的构成之一,实例化对象的时候,分 配内存,占据空间
class B
{
public:
B(){b = 3;}
void fb(){b = 33;}
void display(){cout << "B_b: " << b << endl;}
private:
int b;
};
class D:public B
{
public:
D():B(), d(10){}
void fd(){d = 100;}
void display(){B::display(); cout << "D_d: " << d << endl;}
private:
int d;
int e;
};
int main()
{
D d;
d.display();
cout << sizeof(d) << endl;
return 0;
}
例程说明两个问题:
1。a在D对象d中占据内存,验证派生类继承了基类的所有成员,因为B未实例化对象,未创建B的对象,但是a确实在内存中存在了,可见a是D对象d的一部分,从而获得内存
2。理解 类体内的封装性:
分析d对象的成员
(1)成员函数有
来自基类的:fb()
自身的:fd()
(2)数据成员有
来自基类的:a
自身的:d,e
3。体现 局部封装性的地方:(public继承情形)
自身《=访问=》自身
来自基类《=访问=》来自基类
一一相对,分工明确
(1)对于一般的类(不处于类继承体系中的类)
它的成员函数可以访问它的所有的成员(数据成员+成员函数),
因为成员函数全部自身的,其它被访问成员也都是自身的,所以对得上
(2)对于派生类(处于类继承体系中的类)
它的成员函数分成两个部分:来自基类的+自身的
它的其他成员(数据成员+成员函数)也分成了两个部分:来自基类的+自身
一个完整对象(不独立):基类对象 = 来自基类的成员函数+来自基类的数据成员
访问那些来自的基类的数据成员,必需使用来自的基类的成员函数,虽然宏观上都属于派生类的成员函数
即除了成员函数,程序并无法对于其私有成员进行访问,修改
2。在引入继承层次之后,在派生类的内部(它含有一个 基类对象组成部分,之所以叫 组成部分,因为它不独 立,之所以叫它 部分, 因为它本身又维护了一个小范围的封装性,数据保护)
3。派生类继承了基类的所有成员,即使基类的私有成员,也是派生类对象的构成之一,实例化对象的时候,分 配内存,占据空间
class B
{
public:
B(){b = 3;}
void fb(){b = 33;}
void display(){cout << "B_b: " << b << endl;}
private:
int b;
};
class D:public B
{
public:
D():B(), d(10){}
void fd(){d = 100;}
void display(){B::display(); cout << "D_d: " << d << endl;}
private:
int d;
int e;
};
int main()
{
D d;
d.display();
cout << sizeof(d) << endl;
return 0;
}
例程说明两个问题:
1。a在D对象d中占据内存,验证派生类继承了基类的所有成员,因为B未实例化对象,未创建B的对象,但是a确实在内存中存在了,可见a是D对象d的一部分,从而获得内存
2。理解 类体内的封装性:
分析d对象的成员
(1)成员函数有
来自基类的:fb()
自身的:fd()
(2)数据成员有
来自基类的:a
自身的:d,e
3。体现 局部封装性的地方:(public继承情形)
自身《=访问=》自身
来自基类《=访问=》来自基类
一一相对,分工明确
(1)对于一般的类(不处于类继承体系中的类)
它的成员函数可以访问它的所有的成员(数据成员+成员函数),
因为成员函数全部自身的,其它被访问成员也都是自身的,所以对得上
(2)对于派生类(处于类继承体系中的类)
它的成员函数分成两个部分:来自基类的+自身的
它的其他成员(数据成员+成员函数)也分成了两个部分:来自基类的+自身
一个完整对象(不独立):基类对象 = 来自基类的成员函数+来自基类的数据成员
访问那些来自的基类的数据成员,必需使用来自的基类的成员函数,虽然宏观上都属于派生类的成员函数