C++,权限修饰符、继承与派生、派生类的构造函数、继承的二义性、基类与派生类的转换

2023-09-22 08:00:00

 

目录

一、权限修饰符

二、友元

三、继承与派生

四、派生类的构造函数和析构函数

五、继承的二义性(三角形)

六、基类与派生类的转换


一、权限修饰符

       public:共有

       protected:受保护

       private:私有

使用

       修饰成员(成员变量、成员方法)

注意 

       只改变作用域,不改变内存分配

 修饰成员(成员变量、成员方法)和

  public:     成员在任何位置可被访问

  protected:     成员在当前类与派生类中可被访问

  private:         成员在当前类中可被访问

      

二、友元

1、友元打破访问权限的限制,即让访问权限不生效

2、友元包括

       类的友元C函数;

       类的友元成员函数;

       类的友元类,类的友元可以访问类中所有的成员(包括public、protedcted和private成员)

3、类的友元C函数就是在类中把普通的C函数用friend进行声明

4、类的友元成员函数就是在类中把另一个类的成员函数用friend进行声明

5、类的友元类就是在类中把另一个类用friend进行声明

三、继承与派生

1、继承与派生的概念

       a、继承封装与多态是面向对象语言的核心思想

       b、继承可以使面向对象语言代码重用

       c、一个派生类只从一个基类派生,这称为单继承(single inheritance),这种继承关系所形成的层次是一个树形结构.

       d、从多个基类派生。一个派生类有两个或多个基类的称为多重继承

2、派生类的声明

       a、声明派生类的一般形式为

              class 派生类名: [继承方式] 基类名1,....,[继承方式]基类名n { 派生类新增加的成员 } ;

       b、继承方式包括: public、 privat、protected如果不写此项,则默认为private(私有的)。

       c、单基继承

            假设有A类, 然后让B类公有继承 A类

            class B :public A { ...... };

       d、多基继承

            设置有A类、B类和C, D类公有继承A,私有继承B类,私有继承C

    class D :public A, protected B, private C { ...... } class D :public A, private B,private C { ...... }

3、派生类的构成

派生类中的成员包括从基类继承过来的成员和自已新增加的成员。 (成员指成员变量和成员函数)。

4、继承与权限修饰

  • 派生类中的成员包括从基类继承过来的成员和自已新增加的成员。(成员指成员变量和成员函数)
  • 基类中private修饰的成员始终不能被派生类继承
  • 基类中public修饰的成员与受保护成员始终可以被派生类继承

public继承

protected继承

private继承

基类

private

protected

public

private

protected

public

private

protected

public

派生类

protected

public

protected

protected

private

private

private 修饰的成员,任何情况下都无法被派生类继承。

四、派生类的构造函数和析构函数

  • 构造函数和析构函数都不能被继承
  • 派生类对象被创建时,基类对象会被先创建
  • 派生类的构造函数被调用时,会先调用基类的其中一个构造函数
  • 派生类的构造函数中用了初始化表的方式调用了基类构造函数,默认不写时是调用了基类中可以不传参数的构造函数
  • 在派生类对象释放时,先执行派生类析构函数,再执行基类析构函数

五、继承的二义性(三角形)

       1、多基继承的二义性

              如果已声明了类A1、类A2,再让B继承A1A2

              如果A1A2中同名字的成员,并且都被B继承下去了,些时使用B的对象访       问同名字的成员会产生二义性。

2、共同基类产生的二义性(菱形)

       class B1: public A{......};

       class B2: public A{......};

       class C: public B1,public B2 {......};

      

       3、共同基类产生的二义性的解决办法——虚基派生

相同的属性被合并。

六、基类与派生类的转换

       1、基类与派生类的转换

              a、基类声明的指针变量和引用类型变量可以指向派生类的对象。

      

    class B:public A {.........};

      B b;

      A *pa = &b;

      A &ra = b;

              b、当使用对象的指针变量去访问对象的成员时,能访问到的成员只有从指针所属类中的继       承下来的成员

              c、当使用对象的引用类型变量去访问对象的成员时,能访问到的成员只有从引用类型变量       所属类中继承下来的成员

(只看类型,不看对象)

        d、派生类对象可以向基类对象赋值

class A {  
    public:  
        int x;  
        int y;  
        void show();  
};  
class B :public A {  
    public:  
        int z;  
};  
int main() {  
    A a;  //x, y  
    a.x = 1;  
    a.y = 2;  
      
    B b; //x, y, z  
    b.x = 10;  
    b.y = 20;  
    b.z = 30;  
    //派生类对象向基类对象赋值  
    a = b; //a.x = b.x;  a.y = b.y;  
}    
//派生类对象为基类对象赋值,则b对象中的x,y的值会赋值给a对象的x和y, 因为z在a对象中不存在,所以不会有z的赋值。  
a = b;  

更多推荐

git rebase 修改中间的commit

0.前言今天在移植最新版本kfence功能的时候,一共需要移植大概40多个patch,中间有很多patch存在冲突,需要手动修改后才能合并。当所有的patch都合并完成进行编译的时候,发现其中一个patch手动合并出了个错误。假如共有40个patch,编号1-40,现在问题是第20个patch需要再修改一下,而21-4

【【萌新的FPGA学习之Vivado下的仿真入门-2】】

萌新的FPGA学习之Vivado下的仿真入门-2我们上一章大概了解了我们所需要进行各项操作的基本框架对于内部实现其实一知半解我们先从基本的出发但从FPGA了解一下vivado下的仿真入门正好帮我把自己的riscV波形拉一下行为级仿真step1:进入仿真界面:SIMULATION->单击RunSimulation->单击

无线振弦采集仪应用隧道安全监测的方案解析

无线振弦采集仪应用隧道安全监测的方案解析隧道是交通建设中重要的组成部分,安全监测是保障隧道使用安全的重要手段。无线振弦采集仪可以对隧道进行实时、连续的振动监测,提供精确的数据分析和预警,是隧道安全监测的有效工具。无线振弦采集仪利用振弦原理,通过测量隧道内振动的频率、振幅及相位等参数,来检测隧道结构的状态,从而判断隧道的

加密 K8s Secrets 的几种方案

前言你可能已经听过很多遍这个不算秘密的秘密了--KubernetesSecrets不是加密的!Secret的值是存储在etcd中的base64encoded(编码)字符串。这意味着,任何可以访问你的集群的人,都可以轻松解码你的敏感数据。任何人?是的,几乎任何人都可以,尤其是在集群的RBAC设置不正确的情况下。任何人都可

在Linux中安装nginx-1.20.1+php-7.4.28(增加扩展)

Nginx+PHP安装在公网IP为x.x.x.x的服务器上需要下载安装的软件版本:nginx-1.20.1+php-7.4.28需要增加的PHP扩展如下:在编译安装php-7.4.28时加上的pcntl;单独下载安装的Wxwork_finance_sdk;(在编译安装php-7.4.28时加上--disable-int

Android字体大小dp,sp,px系统设置字体大小变化表现

Android字体大小dp,sp,px系统设置字体大小变化表现<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://sc

.NET Framework 2023 年 8 月安全和质量汇总更新

作者:SaliniAgarwal排版:AlanWang今天,我们发布了针对.NETFramework的2023年8月安全和质量汇总更新。安全CVE-2023-36899–.NETFramework远程代码执行漏洞此安全更新修复了IIS上的应用程序存在的一个漏洞,该漏洞使用其父应用程序的应用程序池,可能导致权限升级或其他

基于SpringBoot的在线商城系统设计与实现

目录前言一、技术栈二、系统功能介绍用户信息管理商品分类管理商品信息管理轮播图管理三、核心代码1、登录模块2、文件上传模块3、代码封装前言现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本ONLY在线商城系统就是在这样的大环境下诞生,其可以帮助管理者在

LuatOS-SOC接口文档(air780E)--errDump - 错误上报

示例--基本用法,10分钟上报一次,如果有的话iferrDumpthenerrDump.config(true,600)end--附开源服务器端:https://gitee.com/openLuat/luatos-devlogerrDump.dump(zbuff,type,isDelete)手动读取异常日志,主要用于用

AG35学习笔记(二):安装编译SDK、CMakeLists编译app、Scons编译server

目录一、概述二、安装SDK2.1网盘SDK-权限不够2.2bj41-需要交叉source2.3mullen-relocate_sdk.py路径有误三、编译SDK3.1/bin/sh:1:gcc:notfound3.2curses.h:Nosuchfileordirectory四、CMakeLists-编译app4.1c

前端面试手撕编程之ES+算法

目录ES6防抖节流防抖、节流应用改变thiscalltypeofthis!=='function'context=context||windowcontext._this=thisdeletecontext._thisbind:return_this.apply(context,[...arguments].slice

热文推荐