C++中派生类使用基类成员的问题

c++ 继承与派生(1)——在派生类的函数中调用基类的成员函数 题目 定义一个基类Base,有两个公共成员函数fun1()和fun2(),如果公有派生出Derived类,Derived类中重载了基类的成员函数fun1(),没有重载基类的成员函数fun2(),如何在派生类的函数中调用基类的成员函数fn1(),fn2()? 源代码 #include "stdafx.h" #include<iostream> using namespace std; ... 阅读详情

在C++中,派生类在定义构造函数时,会调用基类构造函数首先完成基类部分的构造:

class Derive : public Base
{
  public:
    Derive(string nam, int ad, int elem):Base(elem) {
     
    //  等价: this->name = nam;
    //         this->add = ad;
       name = nam;
       add = ad;
    }  
...
}

若若派生类定义了一个基类已有的数据成员,则会覆盖掉基类。在这个构造过程中,之类自身的成员构造可以使用this指针,

this->name = name;

也可以直接使用派生类自己已经定义的变量名进行赋值操作,如:

name = name1;

派生类只能直接访问基类中public/protected的成员,使用【基类类名::member】的形式:

class Derive: public Base{
       int new_id = Base::id;// id 在Base中public或protected
       string new_name= Base::getName();  //getName是Base的非private成员函数
...........
};

 

最后,一起看下完整代码:

#include <iostream>
using namespace std;
 
struct Base 
{
  public:
  Base(int a) {
    this->elem = a;  //   等价: elem = a;
  }
 
  int getElem() {
    return elem;
  }
 
  private:
    int elem;
};
 
class Derive : public Base
{
  public:
    Derive(string nam, int ad, int elem):Base(elem) {
     
    //  等价: this->name = nam;
    //         this->add = ad;
       name = nam;
       add = ad;
    }   
 
    int getElem() {
      return add + Base::getElem();
    }   
 
    string getName() {
      return name;
    }   
    int getBaseElem(){
        return Base::getElem();
    }
 
  private:
    string name;
    int add;
};
 
int main()
{
  Derive d("child class object", 12, 15);
 
  cout <<"Derive name="<< d.getName() << "\nDerive elem=" << d.getElem();
  cout<<endl;                                                   
  cout<<"Base elem="<<d.getBaseElem();
  return 0;
}

下面是运行结果:

$g++ -std=c++11 -o main *.cpp
$main
Derive name=child class object
Derive elem=27
Base elem=15

 

Codex入门19-数据库操作(解放双手:用自然语言写SQL、建表和数据迁移) 写 SQL 是后端开发的日常,但复杂的 JOIN、子查询、窗口函数总让人头疼。本文教你用 Codex CLI 实现:自然语言直接生成 CREATE TABLE、复杂 SQL 查询、数据库迁移脚本(Prisma/Knex/Alembic)、ORM 模型代码(SQLAlchemy/TypeORM)、甚至自动生成数据库文档。重点强调安全红线——永远不要让 AI 直接连接生产数据库。从需求描述到完整数据库层代码,一篇搞定。 阅读详情

相关推荐

视频动作识别、行为识别、时空动作检测数据集整理(持续更新)

动作、行为、事件 在计算机视觉的相关研究中,人体的动作、行为识别是一个基础研究问题。但目前识别、检测人类的动作/行为仍然是一个巨大的挑战。这里整理下当前相关的细分任务、数据集和开源代码(持续更新中)。

人工智能算法与工程实践 3万+

c++类静态成员函数调用成员变量

类静态成员函数与类成员函数的关系

xxwtiancai的博客 2987

保姆级教程:在Linux上用IGH EtherCAT主站搞定从站时钟同步(附sync_datagram报文详解)

本文详细介绍了在Linux系统上使用IGH EtherCAT主站实现从站时钟同步的保姆级教程,重点解析了sync_datagram报文的结构和工作原理。通过实战案例和代码示例,帮助开发者掌握微秒级同步精度的实现方法,适用于工业自动化领域的高精度设备协同控制。

weixin_30733003的博客 260

C++ 继承

C++继承,菱形继承,菱形虚拟继承,虚基表,虚基表指针

TPON的博客 3970

Windows下CMake的下载与安装详解

目录一、CMake介绍二、CMake的下载与安装 一、CMake介绍 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 二、CMake的下载与安装 CMake下载链接:https://cmake.org/download/。 下载最新稳定版即可(Latest Release): 下载完成后,单击“Next”按钮,在下图中勾选“I acce

Wendy的博客 8万+

STM32实战开发(66):STM32图像处理开发教程

随着物联网、人工智能和嵌入式技术的不断发展,图像处理技术在嵌入式系统中的应用越来越广泛。图像处理不仅在视觉识别、安防监控、智能家居等领域中发挥着重要作用,也在工业自动化、医疗成像、无人驾驶等高科技领域中占据重要地位。而STM32凭借其强大的硬件性能和丰富的外设支持,成为了许多图像处理应用的理想平台。

2201_76125393的博客 1445

C++如何在派生类成员函数内调用基类的成员函数(包括构造函数)

前段时间在实现一段代码的过程中遇到了几个

yums467的专栏 3万+

Allegro 给元器件PCB封装库添加3D模型详细步骤

从上面视图可以看到模型跟PCB 库的方向是对了,但是位置偏下,且在PCB封装库后面,我们下面需要做的就是把模型往上移、往前移。首先将元器件3D模型文件放在封装库的目录下(也可以单独新建一个模型库文件夹),注意3D文件必须是Step格式。Transparent: 选择透视的对象,可以是模型、也可以是PCB封装,或者两种都透视。在左边搜索要添加的3D模型的文件(注意是在* 星号前面输入文件名),按回车即可找到。同样的,接下来需要往Y 负方向移,即左移,一边调整一边观察视图。

sinat_15677011的博客 3682

C++中using的三种用法

导入命名空间 //导入整个命名空间到当前作用域 using namespace android::sysprop; //只导入某个变量到当前作用于 using ui::Hdr; 指定类型别名 //用Values代替SurfaceFlingerProties::primary_display_orientation_values //方式1 typedef SurfaceFlingerProties::primary_display_orientation_values Values; //方式2 usin

qq_21750755的博客 642

向华为学习——解读158页 华为敏捷园区网技术解决方案【附全文阅读】

华为敏捷园区网解决方案通过策略随行和体验随身技术,满足移动办公场景下的网络需求。该方案采用敏捷交换机和防火墙自动执行策略配置,实现用户身份认证与业务策略的无缝衔接,且策略配置与IP地址解耦,简化了管理流程。相比传统技术,该方案有效解决了用户分级、QoS保障、无线接入等关键问题,确保用户在移动过程中获得一致的网络体验。

cdfunlove的博客 381

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C++ 继承同一个的基类的所有派生类使用同一个全局变量的三种方式

-

amin_hui的博客 794

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

基类和派生类的成员访问

#include using namespace std; class Cbase { public:     Cbase(int x = 0, int y = 0, int z = 0):a(x), b(y), c(z){};     voi

lidanny的专栏 5101

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++复习(2)派生类成员的标志与访问

首先,在派生类中,成员按照访问属性可以分为以下四类: (1)不可访问成员;这些成员是通过继承得到的,比如继承的基类中原有的私有成员。 (2)私有成员; (3)保护成员; (4)公有成员。 如果这些成员中,有相同的名字的话该怎么办呢?比如我们继承的基类中有个成员名叫做test,在我们的派生类中也有个成员名字叫做test,那该怎么区分它们呢?这就是本文主要探讨的问题。 1、作用域分辨符

lhanchao的博客 1148

C++ 派生类赋值给基类指针

基类和派生类的关系 基类和派生类不是2个独立的类型,派生类是一个基类的类型,它们2个不是分开的,当我们创建一个派生类的时候,派生类中的数据member应该如下 BaseClass : [Base Data] DerivedClass : [Base Data][Derived Data] 派生类的数据类型附加于基类之后 当我们给一个基类类型指向派生类的时候,这个基类指针访问的是派生类继承基类的那部分数据,就算我们在派生类中重新更改继承而来的基类类型,基类指针访问的还是原来的数值,如下 #include &

qq_37026934的博客 900

C++派生类中如何初始化基类对象

今天收到盛大的面试,问我一个问题,关于派生类中如何初始化基类对象,我在想派生类对于构造函数不都是先构造基类对象,然后在构造子类对象,但是如果我们在成员初始化列表先初始化派生类的私有成员,在函数内去调用基类的构造函数,能编译通过吗?或者当我们定义了基类的默认构造函数,而没有去在派生类的构造函数中显示的去调用基类的构造函数,会出现什么状况,我想派生类肯定会自动去调用基类的默认构造函数,那么析构函数又怎...

weixin_30439131的博客 1309

C++继承4 Is a 基类的指针指向派生类的对象

一、关于基类与派生类之间赋值、初始化以及指针指向 /*公有继承: Is a 1.Person类,数据成员:m_strName 成员函数:构造、析构、piay() 2.Soldier类,数据成员:m_iAge 成员函数:构造、析构、work() */ 代码: Person.h #include<iostream> #include<string&gt...

lisaaaaaas0405的博客 967

基类和派生类,虚函数

基类负责定义在层次关系中所有类共同拥有的成员,而每个派生类定义各自持有的成员。

2470

C++中使用基类指针调用派生类中定义的方法

我们需要告诉傻傻的编译器,基类的指针实际上指向了派生类,可以通过这个指针调用派生类的方法。而告诉编译器这个信息的途径,就是dynamic_cast

木头骑士的旋转木马 1万+

【C++】继承 - 从基类到派生类的代码复用逻辑

本篇文章主要介绍了继承的概念和定义,继承和派生类之间的相互转化,继承中的作用域,派生类的默认成员函数,继承与友元,继承于静态成员,多继承以及菱形继承,继承和组合的问题。

2301_81290732的博客 1915

【C++入门到精通】C++入门 —— 继承(基类、派生类和多态性)

这篇文章讨论了继承的概念、定义和使用,并涵盖了基类和派生类对象赋值转换、继承中的作用域、派生类的默认成员函数、继承与友元、继承与静态成员等相关主题。此外,文章还介绍了复杂的菱形继承和菱形虚拟继承,并对继承和组合进行了总结和反思。最后,给出了一些笔试和面试相关的问题。整体而言,这篇文章全面而详细地阐述了继承在面向对象编程中的各个方面,并提供了对该主题的深入理解和思考的机会。

Yawesh的博客 2483

C++继承(派生类的定义方式、派生类的隐藏、菱形继承、虚基表、基类成员地址)

继承是面向对象程序设计的一个重要机制,通过继承,可以利用已有的数据类型来定义新的数据类型,实现代码复用。继承允许**在保持原有类特性的基础上进行扩展**,增加功能。 已存在的用来派生新类的类称为基类(或父类),由父类派生出的类称为派生类(或子类)。派生继承基类的成员,但派生类对基类成员的访问受继承方式和基类成员所处于的作用域限定符限制。

laimaxgg 1375

(C++)基类和派生类的成员访问

#include using namespace std; class Cbase { public:     Cbase(int x = 0, int y = 0, int z = 0):a(x), b(y), c(z){};     void display();     void display(int a, int b);     void set();

1302

C++模板类的派生类中访问基类成员必须显式调用(作用域限定)

一个常见的派生类访问基类成员变量的例子:template&lt;int dim&gt;class A{ public: A():b(2){} int b;};template&lt;int dim&gt;class B:public A&lt;dim&gt;{public:    B(){} void f(){cout&lt;&lt;b&lt;&lt;endl;}};int main(){ B&...

qq_41230365的博客 3366
上一篇: C++OO部分知识小结(1)
下一篇: BOOST-OSCHINA社区的一些经典C/C++例子
Poo_Chai
博客等级 码龄9年 178粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Poo_Chai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值