科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件C++单继承

C++单继承

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:佚名 来源:PCVC 2007年10月30日

关键字: C++ 单继承 Linux

  • 评论
  • 分享微博
  • 分享邮件
在《基类和派生类》中讲述了单继承的基本概念,这节着重讲述继承的具体应用。

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

  成员访问权限的控制

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

//继承性的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继承方式一样。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章