登录  /  注册
首页 > 常见问题 > 正文

派生类默认的继承方式是什么

angryTom
发布: 2019-08-21 13:51:30
原创
13375人浏览过

派生类默认的继承方式是什么

  先回答大家的问题:派生类的默认继承方式有两种。用class定义派生类,默认的继承方式是private,用struct定义派生类,默认的继承方式为public。

推荐教程:C++视频教程

  继承性是面向对象程序设计的第二大特性,它允许在既有类的基础上创建新类,新类可以继承既有类的数据成员和成员函数,可以添加自己特有的数据成员和成员函数,还可以对既有类中的成员函数重新定义。利用类的继承和派生实现了更高层次的代码可重用性,符合现代软件开发的思想。

      C++语言同时支持单一继承和多重继承。单一继承是指派生类只从一个基类继承而来;相应的,多重继承指派生类同时从两个或更多的基类继承而来。java只支持单一继承。

一. 派生类

      派生类的定义格式如下:

      class <派生类名>:[继承方式]<基类名1>
            [,[继承方式]<基类名2>,...,[继承方式]<基类名n>]
      {
              <派生类新增的数据成员和成员函数定义>
      };
登录后复制

说明:

(1)定义派生类关键字可以是class或者是struct,两者区别是:用class定义派生类,默认的继承方式是private,用struct定义派生类,默认的继承方式为public。新增加的成员默认属性也是class对应private属性,struct对应public属性。

(2)基类不能被派生类继承的两类函数是构造函数和析构函数。

二. 3种继承方式下基类成员在派生类中的访问属性

继承描述符父public成员父protected成员父private成员
public子public成员子protected成员 -
protected子protected成员子protected成员 -
private子private成员子private成员 -

用下面的代码简单理解一下:

#include "stdafx.h"
#include<iostream>
 using namespace std; 
 class Base
 {
 private:
     int priData;
 9 protected:
    int proData;
 public:
    int pubData;
 };

class D1:private Base//私有继承
 {
    void f1()
     {
        //priData=1;//基类private成员在派生类中不可直接访问
        proData=2;//基类的protected成员在派生类中为private访问属性
         pubData=3;//基类的public成员在派生类中为private访问属性
    }
 };
 class D2:protected Base//保护继承
 {
     void f2()
    {
         //priData=1;//基类private成员在派生类中不可直接访问
        proData=2;//基类的protected成员在派生类中为protected访问属性
         pubData=3;//基类的public成员在派生类中为protected访问属性
     }
 };
 
 class D3:public Base//公有继承
 {
    void f3()
     {
        //priData=1;//基类private成员在派生类中不可直接访问
         proData=2;//基类的protected成员在派生类中为protected访问属性
        pubData=3;//基类的public成员在派生类中为public访问属性
     }
 };
 
 int main()
 {
     Base obj;
    //obj.priData=1;//对象不可访问Base类中private成员
     //obj.proData=2;//对象不可访问Base类中protected成员
    obj.pubData=3;
   D1 objD1;
    //objD1.pubData=3;//private属性,不可访问
    D2 objD2;
     //objD2.pubData=3;//protected属性,不可访问
    D3 objD3;
     objD3.pubData=3;//public属性,可以访问
    return 0;
}
登录后复制

基类的private成员函数虽然在派生类的成员函数中不可直接访问,但派生类的成员函数可以通过调用基类被继承的函数来间接访问这些成员。如果基类的函数被继承后在派生类中仍为public成员,则可以通过派生类对象直接调用。

先来看一下类成员的访问属性及作用:

访问属性作用
private只允许该类的成员函数及友元函数访问,不能被其他函数访问
protected既允许该类的成员函数及友元函数访问,也允许其派生类的成员函数访问
public既允许该类的成员函数访问,也允许类外部的其他函数访问

好了,继续通过代码来理解:

#include "stdafx.h"
 #include<iostream>
 using namespace std;
 
class Base
 {
 private:
     int priData;
 protected:
    int proData;
 public:
     int pubData;
 //在类的定义中不能对数据成员进行初始化
     void SetData()//为基类中的数据成员赋值
     {
         priData=100;
        proData=200;
         pubData=300;
    }
    void Print()
     {
        cout<<"priData="<<priData<<endl;
       cout<<"proData="<<proData<<endl;
        cout<<"pubData="<<pubData<<endl;
     }
 };

 class Derived:public Base
 {
 public:
     void ChangeData()
     {
         SetData();
         proData=12;//在派生类的成员函数类可以访问基类的非私有成员                   
     }
 };

 int main()
 {
    Base b;
     b.SetData();
     b.Print();
 
     Derived d1;
     d1.ChangeData();
     d1.pubData=13;
    d1.Print();
     
     return 0;
 }
登录后复制

 程序运行结果如下:

c++11.png

以上就是派生类默认的继承方式是什么的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号