派生类规则

2024-05-17 14:48
文章标签 规则 派生类

本文主要是介绍派生类规则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

派生类:

1. 声明为指向基类对象的指针可以指向它的公有派生的对象,但不允许指向它的私有派生的对象

    class base{
        //function
    }

    class derive:private base{
        //function
    }

    void main(){

        base op1,*ptr;
        derive op2;
        ptr = &op1;
        prt = &op2; //错误,不允许将base类的指针指向它私有继承的派生类对象op2
    }



2.允许将一个声明为指向基类的指针指向其公有派生类的对象,但是不能将一个声明为指向派生类的对象的指针指向其基类的对象。


3.声明为指向基类对象的指针,当其指向公有派生类对象时,只能用它来直接访问派生类中从基类继承过来的成员,而不能直接访问公有派生类中定义的成员。

    class A{

        public:
            void print1(){

            }
    }



    class B:public A{

        public:
            void print2(){

            }

    }

    void main(){

        A op1,*ptr;
        B op2;
        ptr=&op1;
        ptr->print1();

        ptr=&op2;
        prt->print1();

        ptr->print2();   //错误,基类指针ptr不能访问派生类中定义的成员函数print2()


    }

若想访问其公有派生类的特定成员,有两种方法

1. 可以将基类指针用显式类型强制转换为派生类指针(静态的方式,因为这些都是调用在编译时静态联编)
    ((B*)ptr)->print2();

2. 虚函数或者纯虚函数 (指针指向不同对象时执行不同的操作,)

    虚函数: 是在 “基类” 中定义的,

    virtual 函数类型  函数名(形参表){

        //函数体
    }

    函数体也可以为 空 ,此虚函数就可以在一个或多个派生类中被重新定义,重新定义只是函数体可以重新定义,而返回类型、函数名、参数个数、参数类型的顺序都必须与基类中的原型完全相同。

虚函数说明:

    1.基类中,用关键字virtual可以将public或protected部分的成员函数声明为虚函数,private函数不可以
    2.派生类中,对基类继承的虚函数进行重新定义时,关键字virtual可写可不写

        如果不写,系统会检测:
          该函数与基类的虚函数有相同的名称
          该函数与基类的虚函数有相同的参数个数及相同的对应参数类型
          该函数与基类的虚函数有相同的返回类型或者满足赋值兼容规则的指针、引用类型的返回类型

        来判断是否还有虚函数的特性
    
    3.虚函数被重新定义时,其函数的原型与基类中的函数原型必须完全相同

    4.通过对象名和点运算符的方式也可以调用虚函数,但这种调用时在编译时进行的动态联编,它没有充分利用虚函数的特性,只有通过基类指针访问虚函数时才能获得运行时的多态性。

    5.虚函数必须是其所在类的成员函数,不能使友元函数,也不能是静态成员函数,因为虚函数调用需要靠特定的对象来决定该激活哪个函数。但是虚函数可以在另一个类中被声明为友元函数。

    6.构造函数不能是虚函数,但析构函数可以是虚函数。



多态:实现了在基类定义派生类所拥有的通用接口,而在派生类定义具体的实现方法,即常说的“同一接口,多种方法”。








这篇关于派生类规则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995547

相关文章

Adblock Plus官方规则Easylist China说明与反馈贴(2015.12.15)

-------------------------------特别说明--------------------------------------- 视频广告问题:因Adblock Plus的局限,存在以下现象,优酷、搜狐、17173黑屏并倒数;乐视、爱奇艺播放广告。因为这些视频网站的Flash播放器被植入了检测代码,而Adblock Plus无法修改播放器。 如需同时使用ads

关联规则(一)Apriori算法

此篇文章转自 http://blog.sina.com.cn/s/blog_6a17628d0100v83b.html 个人觉得比课本上讲的更通俗易懂! 1.  挖掘关联规则 1.1   什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后

电子电气架构---私有总线通信和诊断规则

电子电气架构—私有总线通信和诊断规则 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、

Python中的单下划线和双下划线使用规则

引言 Python 遵循一些关键的命名规则,这些规则涉及到使用单个或双下划线。通过这些规则,你可以在应用程序接口(API)中区分可访问的和不可访问的标识符,编写适用于继承的稳健类,以及防止命名冲突等。 遵守这些规则,你的代码将显得更贴近 Python 的风格,并且在其他 Python 程序员看来更加统一。这项技能在你为其他开发者编写代码时尤为重要。 本文[1]将带你了解: 基于使用下划线

【0324】Postgres内核 Shared Buffer Access Rules (共享缓冲区访问规则)说明

0. 章节内容 1. 共享磁盘缓冲区访问机制 (shared disk buffers) 共享磁盘缓冲区有两套独立的访问控制机制:引用计数(a/k/a pin 计数)和缓冲区内容锁。(实际上,还有第三级访问控制:在访问任何属于某个关系表的页面之前,必须持有该关系表的适当类型的锁。这里不讨论关系级锁。) Pins 在对缓冲区做任何操作之前,必须“对缓冲区pin”(即增加其引用计数, re

[mysql]SQL语言的规则和规范

规则 是什么呢,规则就是我们最基本,每时每刻都要遵守的比如人行道靠右,不能逆行, 规范 呢就是锦上添花,如果你不这么做,是不那么道德,不那么好的,就像小学生见到老师要问好,不问好可以吗,当然也是可以的,但是这样就不那么礼貌了。但是也不会开除你, 规范是建议。规则: USE dbtest2 SELECT * FROM emp 我们之前使用cmd操作的时候,是不是必须要先选择一个数据

AI聊天应用不能上架?Google play对AI类型应用的规则要求是什么?

随着生成式AI模型的广泛应用,很多开发者都有在开发AI应用或将其整合到应用中。我们知道,谷歌是非常注重应用生态的,去年开始就推出了一些针对生成式AI应用的政策,对AI应用的内容质量和合规性问题提出了一些要求。 几天前,还有开发者聊到,现在AI类型应用(如AI聊天)上架越来越难了。 (可斯信进qun与众多开发者交流上架经验) 这很可能是没了解清楚Google play 对AI应用的一些

【重学 MySQL】十二、SQL 语言的规则与规范

【重学 MySQL】十二、SQL 语言的规则与规范 基本规则注释语法规则命名规则基本命名规则具体命名规范其他注意事项 数据导入指令 SQL(Structured Query Language,结构化查询语言)的规则与规范是确保SQL语句能够正确执行、提高代码可读性和可维护性的基础。 基本规则 语句结构: SQL语句可以写在一行或多行中,为了提高可读性,建议将各子句分行

线性代数|机器学习-P33卷积神经网络ImageNet和卷积规则

文章目录 1. ImageNet2. 卷积计算2.1 两个多项式卷积2.2 函数卷积2.3 循环卷积 3. 周期循环矩阵和非周期循环矩阵4. 循环卷积特征值4.1 卷积计算的分解4.2 运算量4.3 二维卷积公式 5. Kronecker Product 1. ImageNet ImageNet 的论文paper链接如下:详细请直接阅读相关论文即可 通过网盘分享的文件:image

直接路由配置集群通信---------通过quagga 动态添加服务器路由规则

上一篇微博提到关于使用直接路由的方式配置集群通信,其优点很明确,简单易懂,但是缺点也是不容忽视的。假设一下,你的集群里面有100甚至是上千个node,在每个服务器上,你都得去配置到其他所有node的静态路由,其工作量是庞大切枯燥的。 这里我详细介绍一下,使用quagga来动态添加路由规则。软件主页http://www.quagga.net。 最简单的方式当然是直接在每台服务器上安装quagga