C 单继承

2008-02-23 05:25:35来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

 在《基类和派生类》中讲述了单继承的基本概念,这节着重讲述继承的具体应用。

  在单继承中,每个类能够有多个派生类,但是每个派生类只能有一个基类,从而形成树形结构。

  成员访问权限的控制

  在《基类和派生类》一讲中,我们讲述了派生类和派生类的对象对基类成员的访问权限的若干规定,这里通过一个实例进一步讨论访问权限的具体控制,然后得出在使用三种继承方式时的调用方法。

//继承性的public继承方式的访问权限的例子
#include

file://定义基类A
class A
{
public:
A() { cout<<"类A的构造函数!"< A(int a) { Aa = a, aa = a, aaa = a; }
void Aprint() { cout<<"类A打印自己的private成员aa:"< int Aa;
private:
int aa;
protected:
int aaa;
};

file://定义由基类A派生的类B
class B : public A
{
public:
B() { cout<<"类B的构造函数!"< B(int i, int j, int k);
void Bprint() { cout<<"类B打印自己的private成员bb和protected成员bbb:"< void B_Aprint() { cout<<"类B的public函数访问类A的public数据成员Aa:"< cout<<"类B的public函数访问类A的protected数据成员aaa:"< GetAaaa();
GetAaaa1();}
private:
int bb;
void GetAaaa() { cout<<"类B的private函数访问类A的public数据成员Aa:"< cout<<"类B的private函数访问类A的protected数据成员aaa:"< protected:
int bbb;
void GetAaaa1() { cout<<"类B的protected函数访问类A的public数据成员Aa:"< cout<<"类B的protected函数访问类A的protected数据成员aaa:"< };

file://基类B的构造函数,需负责对基类A的构造函数的初始化
B::B(int i, int j, int k):A(i), bb(j), bbb(k) {}

file://程式主函数
void main()
{
B b1(100, 200, 300); file://定义类B的一个对象b1,并初始化构造函数和基类构造函数
b1.B_Aprint(); file://类B调用自己的成员函数B_Aprint函数
b1.Bprint(); file://类B对象b1访问自己的private和protected成员
b1.Aprint(); file://通过类B的对象b1调用类A的public成员函数
}


  该程式的输出结果为

   类B的public函数访问类A的public数据成员Aa:100

   类B的public函数访问类A的protected数据成员aaa:100

   类B的private函数访问类A的public数据成员Aa:100

   类B的private函数访问类A的protected数据成员aaa:100

   类B的protected函数访问类A的public数据成员Aa:100

   类B的protected函数访问类A的protected数据成员aaa:100

   类B打印自己的private成员bb和protected成员bbb:200,300

   类A打印自己的private成员aa:100

  上述是属public继承方式,我们能够得出以下结论:

  在公有继承(public)时,派生类的public、private、protected型的成员函数能够访问基类中的公有成员和保护成员;派生类的对象仅可访问基类中的公有成员。

  让我们把继承方式public改为private,编译结果出现1处如下错误:

   'Aprint' : cannot access public member declared in class 'A'

  出错语句在于:b1.Aprint();,因此,我们能够得出以下结论:

  在公有继承(private)时,派生类的public、private、protected型的成员函数能够访问基类中的公有成员和保护成员;但派生类的对象不可访问基类中的任何成员。另,使用class关键字定义类时,缺省的继承方式是private,也就是说,当继承方式为私有继承时,能够省略private。

  让我们把继承方式public改为protected,能够看出,结果和private继承方式相同。



[1] [2] 下一页

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 子对象和堆对象

下一篇: C 多继承

热门词条
热门标签