c ++中继承问题小结

原创 2012年04月06日 10:43:03
1.c++中继承有公有继承,保护继承,私有继承

    定义个基类:

    #include<iostream>

    using namespace std;

    class Base

    {

    public:

    void display()

    {

    cout《"huang"《endl;

    }

    protected:

    int x;

    private:

    int y;

    };

    定义一个派生类:

    公有继承:派生类的对象可以访问基类中的公有成员,派生类的成员函数可以访问基类的公有和保护成员,

    基类的公有成员和保护成员作为派生类的成员时,保持其原有状态

    class A:public Base

    {

    public:

    void print()

    {

    cout《"liglog"《endl;

    display();//派生类内部可以访问基类的公有成员

    x=0;//派生类内部中可以访问基类的保护成员

    cout《x《endl;

    //y=1;//派生类内部都不可访问基类的私有成员

    //cout《y《endl;

    }

    protected:

    int Ax;

    private:

    int Ay;

    };

    保护继承:派生类的成员函数可以访问基类的公有成员和保护成员,以及基类的公有成员和保护成员作为派生类的保护成员,保护成员还可被派生类的子类访问

    class B:protected Base

    {

    public:

    void print()

    {

    cout《"shi"《endl;

    display();//派生类内部可访问基类的公有成员

    x=1;//派生类内部可访问基类的保护成员

    cout《x《endl;

    //      y=1;//派生类内部不可访问基类的私有成员

    //      cout《y《endl;

    }

    protected:

    int Bx;

    private:

    int By;

    };

    私有继承:基类的公有成员和保护成员作为派生类的私有成员,不能被派生类的子类访问,即不能被往下继承。

    class C:private Base

    {

    public:

    void print()

    {

    cout《"wo"《endl;

    display();//派生类内部可访问基类的公有成员

    x=1; //派生类内部可访问基类的保护成员

    cout《x《endl;

    //      y=1; //派生类内部不可访问基类的私有成员

    //      cout《y《endl;

    }

    protected:

    int Cx;

    private:

    int Cy;

    };

    int main()

    {

    // 公有继承部分

    A aObject;

    aObject.display();//派生类外部可以访问基类的公有成员

    aObject.print();

    // aObject.x=1;//派生类外部不可访问基类的保护成员

    // aObject.y=3;//派生类外部不可访问基类的私有成员

    //保护继承部分

    B bObject;

    // bObject.display();//派生类外部不可访问基类的公有成员

    bObject.print();

    // bObject.x=1;//派生类外部不可访问基类的保护成员

    // bObject.y=1;//派生类外部不可访问基类的私有成员

    //私有继承部分

    C  cObject;

    //  cObject.display();//派生类外部不可访问基类的公有成员

    cObject.print();

    //  cObject.x=1;//派生类外部不可访问基类的保护成员

    //  cObject.y=1;//派生类外部不可访问基类的私有成员

    return 0;

    }

    哪里不对的,指点指点,别指指点点。

C语言·数组知识小结

在C语言中我们经常用到数组,这其中有很多我们需要了解并且注意的地方。 1. 一维数组的创建和初始化。 2. 一维数组的使用。 3. 一维数组在内存中的存储。 4. 指针的初步介绍 5. 一维数组的指针...
  • qq_40927789
  • qq_40927789
  • 2017年11月27日 00:45
  • 51

【C++基础之二十一】菱形继承和虚继承

菱形继承是多重继承中跑不掉的,Java拿掉了多重继承,辅之于接口。C++中虽然没有明确说明接口这种东西,但是只有纯虚函数的类可以看作Java中的接口。在多重继承中建议使用“接口”,来避免多重继承中可能...
  • jackyvincefu
  • jackyvincefu
  • 2014年01月05日 09:05
  • 10520

关于继承与派生的小结

大家学了C++之后都知道C++是一种面向对象的语言,因此,面向对象程序设计的主要特征也是C++的主要特点,具体如下: 1.封装性:所谓封装性就是将一组数据与这组数据有关的操作集合组装在一起,形成一个能...
  • SmileLeLe0820
  • SmileLeLe0820
  • 2016年05月26日 14:55
  • 198

C++学习-继承中的作用域(10)

原文地址:http://blog.csdn.net/gzshun/article/details/7289089 GDC注:这篇文章非常好。讲解了继承时,因为子类和父类作用域不太的问题所引发的成员...
  • xiaogugood
  • xiaogugood
  • 2014年03月20日 09:59
  • 544

继承中的类作用域

每个类定义自己的作用域,在这个作用域内我们定义类的成员。当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内。如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中寻找该名...
  • tengyft
  • tengyft
  • 2015年04月23日 15:15
  • 780

C++之钻石问题和解决方案(菱形继承问题)

在C++中,什么叫做钻石问题(也可以叫菱形继承问题),怎么避免它? 下面的图表可以用来解释钻石问题。 假设我们有类B和类C,它们都继承了相同的类A。...
  • czjuttsw
  • czjuttsw
  • 2012年12月27日 14:17
  • 16202

【学习总结】顺序表模拟约瑟夫问题

问题描述: n个人围坐在一起,从第s个人报数,报到数字为m的人出列。然后从出列的下一个人重新从1开始报数,数到m的人出列,依次类推……直到所有人都出列,求出列次序。//说明为了符合实际,数组下标为0...
  • chendongqaq
  • chendongqaq
  • 2017年03月23日 21:44
  • 376

java中的类c继承了b,b继承了a,c可以直接调用a的方法吗?怎么调用。

java中的类c继承了b,b继承了a,c可以直接调用a的方法吗?怎么调用。  分享| 2011-04-18 20:58accout_number | 浏览 869 次 2011...
  • evilcry2012
  • evilcry2012
  • 2016年03月23日 10:07
  • 1493

C语言面向对象编程(二):继承详解

为了像 C++ 中一样通过类实例来访问成员函数,必须将结构体内的函数指针的第一个参数定义为自身的指针,在调用时传入函数指针所属的结构体实例。这是因为 C 语言中不存在像 C++ 中那样的 this 指...
  • foruok
  • foruok
  • 2014年01月15日 23:13
  • 12374

C++重复继承

重复继承   下面我们再来看看,发生重复继承的情况。所谓重复继承,也就是某个基类被间接地重复继承了多次。   下图是一个继承图,我们重载了父类的f()函数。     其类继承的源代码...
  • guogaoan
  • guogaoan
  • 2014年08月05日 12:31
  • 473
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c ++中继承问题小结
举报原因:
原因补充:

(最多只允许输入30个字)