c++第十一天(基类与派生类的赋值问题和动态多态)

C++:派生类指针赋值给基类指针问题 在C++继承中,很容易遇到一个问题,那就是将派生类指针赋值给基类指针(向上转型)的情况,下面我们就来举例分析: 举一个多继承的例子: #include <iostream> using namespace std; //基类A class A { public: A(int a); public: void display(); protected: int m_a;... 阅读详情

目录

一、派生类和基类的赋值关系:

二、虚指针访问虚表中的虚函数

三、动态多态

四、纯虚函数与抽象类

五、虚析构

六、纯虚函数和overide


一、派生类和基类的赋值关系:

1、派生类可以赋值给基类;基类不可以赋值给派生类。

2、原因:派生类所占的空间比基类大。赋值运算会调用operator =()函数,赋值操作以左边对象为准,因为右边对象的成员比左边对象的成员多(派生类继承基类的信息,还有自己特有的成员),operator=()函数严格按照命令来进行赋值操作时,由于在右边对象中找不到指定的某个成员,所以会导致出错。

3、对象指针赋值

(1)基类对象可以定义一个指针指向派生类,但是派生类不可以定义指针指向基类。

Father f; 
Son s;
Father *p1 = &s;//可以 
Son *p2 = &f;//不可以 

(2)原因:派生类指针指向的空间比基类大。(可能会越界访问) 所以当基类的指针操作派生类的对象时,由于基类指针会像操作基类那样操作派生类对象,而基类对象所占用的内存空间通常会小于派生类对象,所以基类指针不会超出派生类对象去操作数据。反之派生类指针指向基类对象,那么就会把一部分不属于基类对象的内存也包括进来操作,于是在使用该指针进行操作时,常常会删除或修改了基类对象之外的数据,产生一些不易察觉而且后果很严重的错误。所以派生类指针是不允许指向基类对象的。

 (3)基类的指针只能指向派生类继承的基类空间(相当于指向基类本身)。

 下列展示一下代码:

demo1
#include <iostream>

using namespace std;
基类
class base
{
public:
    base(int d) : data(d) {}
    int data;
};

//派生类
class xbase : public base
{
public:
    xbase(int xd, int d) : base(d)
    {
        this->xdata = xd;
    }
    int xdata;
};

int main()
{

    定一个基类
    base a(100);

    派生类
    xbase b(123, 233);

    cout << a.data << endl;
    cout << b.data << endl;
    cout << b.xdata << endl;

    把派生类赋值给 基类
    a = b;
    cout << a.data << endl; 输出的是 233 ,因为233是派生类传给基类的,派生类覆盖基类后,基类再调用就就是原来传递的值

    // b=a;  基类无法 覆盖 派生

    
    base *p = &b;   //基类指向派生类
    只能是基类在左边,而且基类指针指向的也是指向继承过来那个区域本身的地址
    p->data = 200;

    使用基类对派生类作引用 ,为什么类型不需要匹配?? 因为引用是一个指针常量 int *const p,本质是一个常量
    base &q = b;
    // int *const p1; 有问题,常量指针必须定义的时候初始化
    int const *p2;   常量指针定义的时候不用初始化
    // xbase *bq = &a;
    // xbase &bbq = a;
}
demo2
这个指针的引用比较难看懂,需要指针厉害才行
int main()
{

	cout << sizeof(base) << endl;

	base tmp;

	cout << &tmp << endl;
	cout << &tmp.a << endl;    tmp 和 tmp.a 的地址是一样的
	cout << &tmp.b << endl;

	获取虚表的地址
	long long *v_addr = (long long *)(*((long long *)&tmp)); 得到首地址 -> 拿该地址上 8 个空间的数据!

	cout << v_addr << endl;

	利用虚表地址访问虚函数
	typedef void (*Fun)(void); 重命名函数指针类型
	Fun pfun;				   定义一个函数指针 pfun

	保存虚函数的地址
	pfun = (Fun)*v_addr; 强制类型转换为该函数指针类型
	调用虚函数
	pfun();

	pfun = (Fun) * (v_addr + 1);
	pfun();

	pfun = (Fun) * (v_addr + 2);
	pfun();
}

二、虚指针访问虚表中的虚函数

 1、虚表指针,永远都是储存在对象的首地址上的。

2、所有的虚函数,都储存在系统的虚表中。

3、子类会把父类的虚表指针也继承下来,子类与父类共用一个虚表(实现覆盖)。

4、虚表指针(virtual)

(1)虚函数虚表指针永远是储存在对象是首地址中。(它和数据成员的顺序无关) .

(2)virtual ,含有虚方法,系统就会创建一个 *vptr 指针,指向系统中的虚表。

(3)所有的虚函数,都存储在系统的虚表中。

(4)virtual void show(){}     //虚函数

(5)子类会把父类的虚表指针也继承下来,子类与父类共用虚表(实现覆盖)。

三、动态多态

1、多态:

优点:提高代码的复用性!

概念:一个函数作用于不同的参数,所得到的结果不一样。

静态多态 : 程序在编译阶段已经 确定将要执行的状态。 (函数重载,运算符重载,模板)

动态多态 :程序在运行阶段才能确定将要执行的状态。 (动态绑定)

2、动态多态使用前提:

(1)基类要有虚函数 。

(2)派生类重写基类的虚函数  (实现覆盖)。

(3)通过基类的指针或引用指向派生类的对象,并调用重写后的接口。 (类外函数调用)

缺一不可。

3、什么时候使用动态多态?

答:想要一个函数实现不同的功能时,就采用动态多态的设计方式。(重载只是同名函数具有不同参数,动态多态是同一个函数具有同样的参数)。

四、纯虚函数与抽象类

格式:virtual  函数返回类型  函数名(参数表)= 0;  //纯虚函数  virtual  void  show( ) = 0;

1、当一个类中含有一个纯虚函数,那么这个类就是抽象类!

2、抽象类不能定义对象。(不能实例化,子类也不能)。

3、当一个函数覆盖纯虚函数,这个类就不是抽象类了。

#include <iostream>

using namespace std;

定义一个抽象类 
class  base{
public:
    定义一个纯虚函数 
    virtual void show()=0;
};

没有覆盖基类的纯虚函数,xbase 还是一个抽象类 
class xbase : public base {
public: 
    void show_xbase(){
        cout << "show_xbase" <<endl; 
    }
};

class nbase : public base {
public:
    覆盖基类的纯虚函数 
    void show(){
       cout  << "nbase" << endl; 
    }
    void show_xbase(){
        cout << "show_xbase" <<endl; 
    }
};


int main()
{
   定义一个抽象类的对象 
   base tmp;  错误的!无法定义对象 

   xbase t;  不可以的!因为派生类也继承了基类的,纯虚函数!  

   nbase q;  覆盖纯虚函数后,该类就不是抽象类 

}

4、抽象类的作用是说明这个类要实现动态多态 ( 预留接口 ) 。

五、虚析构

作用:把所有的析构函数放入虚表,使派生类的析构函数也能执行。

1、基类不能用指针为子类释放空间,无法调用子类析构函数,需要用虚析构才能释放。

2、语法: virtual ~基类名 ( ) { }   //虚析构函数

3、要求:在基类的析构函数前面加上virtual,或者在基类和子类的析构函数前面都加上virtual,不能只在子类前面加。

class  base {
public: 
    base() { 
        cout << "base构造函数" << endl; 
    }
    virtual ~base(){ 
        cout << "~base析构函数" << endl; 
    }
}; 
class  xbase : public base {
public:    
    xbase(){
        cout << "xbase构造函数" << endl;
        p = new int;
        cout << "分配堆空间" << p << endl;
    }
    ~xbase(){ 
        cout << "~xbase析构函数" << endl;
        cout << "p -> 释放堆空间"<< p << endl;
        delete  p; 
    }
private: 
    int *p;
}; 

利用基类调用构造函数和析构函数,但不能调用子类的析构函数,需要在基类的析构函数前面加上virtual方法。
void test(base *p){    
    delete p; 删除基类指针后就不能触发派生类的析构函数了,因为它是调用(指向)派生类空间的。
}

int main()
{
    test(new xbase); 
}

4、关键点: 在delete删除基类指针 p 后就不能触发派生类的析构函数了,因为它是调用派生类空间的。指针 p 只和基类的析构函数静态绑定,没有和子类的析构函数绑定。在 delete 了 p 之后就只调用了基类的析构函数。

追加:虚析构动态绑定的实现条件,(和动态多态的条件一样)。

 (1) 通过指针调用函数。

 (2)虚函数。

 (3)必须是向上转型(即基类指针指向子类对象)。

问:构造函数在什么时候执行呢?

答:构造函数是在创建对象的时执行的。

5、虚析构的本质:

利用virtual关键字让基类和派生类的析构函数一起放入虚表中(继承下来的,派生类可以不声明virtual),在调用 p 释放的时候调用共有的虚表函数,一起调用析构函数释放。

六、纯虚函数和overide

描述:override保留字表示当前函数重写了基类的虚函数。

虚函数:关键字“virtual”,在基类中声明,且在基类中有函数体;

纯虚函数:在虚函数后面加上“=0”,纯虚函数在基类中没有函数体;

抽象类:包含纯虚函数的类。

子类继承并对纯虚函数进行实现(子类重写基类虚函数),使用保留字“override”。 

基类的纯虚函数:
    virtual void update(const int& num) = 0;

子类重写基类虚函数:
    virtual void update(const int& num) override;   //并在子类中对该函数进行实现。

基类与派生类对象之间的赋值兼容关系(C++ 学习笔记 35)   不同类型的数据之间的自动转换和赋值,称为赋值兼容。   在基类和派生类对象之间也存在有赋值兼容关系,基类和派生类对象之间的 赋值兼容规则 是指在需要基类对象的任何地方,都可以使用 公有派生类的对象 来替代。     通过公有继承,派生类保留了基类中除构造函数、析构函数之外的所有成员,基类的公有或保护成员的访问权限在派生类中全部原样保留了下来,在派生类外可以调用基类的公有成员函数访问基类的私有... 阅读详情

相关推荐

c++基类,派生类 ,接口,继承方式

基类通常应该定义一个虚析构函数; 基类用virtual关键字声明的虚函数可以在派生类中重新定义,在派生类中重新定义时最好也加上virtual关键字 通过指针或引用调用的虚函数在运行时才会被解析,其他函数在编译时就会被解析。 动态绑定(多态): 用一个基类的引用(或指针)调用一个虚函数时,传入不同的派生类或者基类将调用不同的函数实现。 基类引用可以指向派生类是因为派生类含有基类的部分,编译器 会隐式...

shayne000的博客 1119

C++继承详解——基类派生类对象赋值转换、菱形虚拟继承

详细讲解C++特性——继承,派生类的默认构造函数(及派生类和基类的函数顺序),基类和派生类的赋值转换,继承的3个模型——单继承、多继承、菱形继承。并且讲解菱形继承的菱形虚拟继承(原理:虚基表存偏移量),最后对继承总结,并提出组合。

bang___bang_的博客 2524

C++ 类继承:构造函数与析构函数调用顺序,派生类和基类之间的特殊关系,公有继承及其他

文章目录一、派生类构造函数与基类构造函数二、创建与销毁派生类对象时,构造函数和析构函数的调用三、派生类和基类之间的特殊关系四、公有继承(一)、何为公有继承(二)、多态公有继承(三)、虚函数的工作原理(四)、虚函数注意事项五、访问控制:protected六、抽象基类 一、派生类构造函数与基类构造函数 派生类的构造函数做了如下事情: 创建基类对象 派生类构造函数通过成员初始化列表将基类信息传递给基类...

LonelyPlanet_的博客 2037

基类对象和派生类对象之间的赋值关系

基类对象和派生类对象之间的赋值关系具体是指:基类的对象可不可以赋值给子类对象或者子类对象可不可以赋值给基类对象。         一般来说,只有派生类的对象可以赋值给基类的对象,反之,则不可以。例如: Father a ; // 基类对象 Son b ; // 派生类对象 a = b ; // 可以 b = a ; // 不可以        为什么

2458

C++学习之多态

在C++中,多态是面向对象程序设计中的一个重要概念,通过多态性可以实现基类和派生类对象的统一访问接口,从而提高代码的灵活性、可扩展性和易维护性。:每个类对象在内存中都会包含一个隐藏的指针,称为虚函数指针(vptr),它指向相应类的虚函数表。虚函数表是一个静态的数据结构,类的每个实例对象不会拥有独立的虚函数表,而是指向类的共享虚函数表。需要注意的是,类中包含纯虚析构函数的情况很少见,并且只在极特殊的情况下使用。C++的多态性的实现依赖于虚函数表和虚函数指针,通过动态联编实现了对象的运行时多态特性。

百锦再的博客 1万+

STM32G0——USB虚拟串口

STM32G0用cubeMX配置实现USB虚拟串口

阿昌 2318

基类指针和派生类指针

基类指针指向派生类对象 派生类对象也“是”基类对象,但两者不同。 派生类对象可以当做基类对象,这是因为派生类包含基类的所有成员。 但是基类对象无法被当做成派生类对象,因为派生类可能具有只有派生类才有的成员。 所以,将派生类指针指向基类对象的时候要进行显示的强制转换,否则会使基类对象中的派生类成员成为未定义的。 总结:基类指针和派生类指针指向基类对象和派生类对象的4中方法:

zhanghuan_wangkai的博客 5686

Win7运行豆包桌面版的兼容性原理与实操方案

Windows 7作为已停止主流支持的操作系统,其与现代Electron应用的兼容性问题本质是API层面的系统调用断层。Electron 28+依赖的GetSystemTimePreciseAsFileTime、SetThreadDescription等Windows 10专属API,在Win7 SP1中天然缺失,导致‘无法定位程序输入点’等典型错误。解决路径并非简单打补丁,而是需理解底层ABI差异、补丁堆叠边界及动态API转发机制。关键技术价值在于通过兼容层(如VxKex NEXT)或运行时降级(Elec

weixin_33290540的博客 1324

c++继承 基类 派生类 虚函数

继承   类和类的关系有组合、继承和代理。继承的本质就是代码复用。子类继承父类中的一些东西,父类也称为基类,子类也称为派生类。派生类继承了基类除构造函数以外的所有成员。 继承的方式   继承方式有public(公有继承)、private(私有继承)和protected(保护继承)。基类中不同访问限定符下(public、protected、private)的成员以不同的继承方式继承,在派生类中的访问限定也不同,具体如下: 基类的布局优先于派生类 #include<iostream> class

cleverlemon的博客 9949

SMPTE ST 2110 概论(三)

SMPTE ST 2110 概论(三)ST 2110-30:未压缩的PCM音频流ST 2110-31:非PCM音频传输ST 2110-40:辅助数据传输结语 ST 2110-30:未压缩的PCM音频流 鉴于音频系统是广播系统中最复杂,也是最重要的一套系统,我们先来回顾一下广电音频系统的历史。 最老式的音频都是基于模拟信号的,具有有限的动态范围,并且用连续的电压变化来描述音频。再后来就基于数字信号(...

Cidd0422的博客 1万+

为什么你的XGBoost多分类效果不如预期?可能是这5个参数没调对

本文深度剖析了XGBoost模型在处理多分类问题时效果不佳的五大关键参数陷阱。针对多分类问题的独特性,文章提供了max_depth、learning_rate、采样参数及正则化参数等核心参数的量化调整策略与诊断方法,帮助开发者精准调优,有效提升模型在各类别上的均衡性能与泛化能力。

weixin_29182481的博客 295

基类、派生类、多态

基类、派生类、多态一、概念引领1. 继承和派生,一个过程,两个角度2. 派生类的目的3. 如果不使用派生类,会遇到的问题二、派生类规范,派生类与基类关系1. 派生类规范2. 派生类与基类的指针,访问权限,类型转换3. 基类与派生类之间赋值操作,切片问题4. 指向基类的指针与指向派生类的指针5. 基类的引用与派生类的引用三、给定基类的指针,他到底指向谁?动态多态0. 概念引入:同质,异质,类型字段 (Type Fields)1. 一种不成熟的解决方案,限定单一指向2. 第二种不成熟的解决方案,类型字段,差不多

Cdccc_daye的博客 3225

YOLOv12环境配置,手把手教你使用YOLOv12训练自己的数据集和推理(附YOLOv12网络结构图),全文最详细教程

YOLO 系统尊嘟太卷了吧,YOLOv11 还没完明白,YOLOv12 就重磅来袭,YOLOv12 是由纽约州立大学联合中科院在 2025年2月19 日发布,从 YOLOv12 论文题目我们大概就知道做了那些更新 ,下图是YOLOv12 在 COCO 数据集上的性能表现引入区域注意力机制(area-attention):通过引入十字形窗口自我注意机制,沿水平和垂直条纹计算注意力机制,纵横交错的注意机制。如下图所示,区域注意力采用最多简单的等分方法,将特征地图垂直或水平划分为 L 个区域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6万+

C++的继承、基类和派生类的赋值转换、继承与友元、继承与静态成员、菱形继承和菱形虚拟继承、虚析构函数、继承与组合(重要)

是一种继承方式,用来解决菱形继承中数据冗余和二义性的问题。通过使用虚拟继承(以virtual 继承方式 派生类名的形式),可以确保在继承链中只保留一个基类实例,使得派生类可以共享基类的唯一副本,被虚拟继承的类叫做虚基类

m0_73975164的博客 1283

4D毫米波雷达:高度信息与微多普勒效应

4D毫米波雷达:高度信息与微多普勒效应​ ,人工智能,计算机视觉,大模型,AI,本文深入解析4D毫米波雷达的高度信息获取与微多普勒效应。4D毫米波雷达通过MIMO技术、垂直天线布局及相位差计算等获取高度信息,相较传统雷达更精准。微多普勒效应由目标微运动引发,可用于目标识别、分类和运动监测。文中结合自动驾驶、安防监控案例,分析技术挑战与未来趋势,如信号干扰、数据处理复杂,未来将向高精度、与其他传感器融合发展,展现出在多领域的巨大应用潜力。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 9万+

1 电科院FTU检测标准学习笔记-外观检查

作者简介:本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验。

sixtome 1849

【c++】基类派生类多态虚函数?

如果派生类没有覆盖其基类中的某个虚函数,则该虚函数的行为类似于其他的普通成员,派生类会直接继承其在基类中的版本,派生类可以在它覆盖的函数前使用virtual关键字,但不是非得这么做(可有可无)。根据引用或指针所绑定的对象类型不同,该调用可能执行基类的版本,也可能执行某个派生类的版木,基类通过在其成员函数的声明语句之前加上关键字virtual使得该函数执行动态绑定。对于前者,基类通常将其定义为虚函数(virual)。派生类可以继承定义在基类中的成员,但是派生类的成员函数不一定有权访问从基类继承而来的成员。

小洁洁 1549

打造AI智能体员工,我用扣子复刻了华与华、奥美和金枪大叔

这事说穿了,就是你用多个AI智能体,分别扮演专业角色,构成一支能力互补、各司其职的“数字团队”。每个智能体,都有明确的角色设定、任务边界和接口形式。它不再是一个泛泛的ChatGPT,而是你手下的“品牌顾问”、“策略专家”、“文案大神”、“短视频导演”、“运营总监”。简单来说,你不再是雇一个人,而是养一群机器人打工——24小时不摸鱼,不请假,不离职。如果你是个人创业者、内容创作者、培训机构、中小企业主,其实都可以尝试构建属于你自己的“AI虚拟员工矩阵”。

互联网架构师笔记 1498

c++继承多态(建立基类 area_cl 的两个派生类 rectangle 与 isosceles)

要求: (1)建立基类 area_cl 的两个派生类 rectangle 与 isosceles,让每一个派生类都包含一个函数area(),分别用来返回矩形与三角形的面积。用构造函数对 height与width进行初始化。 (2)写出主程序,用来求 height与width分别为10.0与5.0的矩形面积,以及求height与 width分别为4.0与6.0的三角形面积。 (3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。 #include<iostream&gt

Kerryliuyue的博客 4210

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

C++派生类向基类的类型转换

本篇主要参考《C++ Primer 第5版》,为什么派生类能向基类进行类型转换。 1. 派生类向基类的类型转换 C++ Primer P530 1.派生类对象中含有与其基类对应的组成部分,所以我们能把派生类的对象当成基类对象来使用,而且我们也能将基类的指针或引用绑定到派生类对象中的基类部分上。编译器会隐式地执行派生类到基类的转换。 2.为什么能把基类的指针或引用绑定到派生类对象中的基类部分上?因为派生类对象中含有基类的组成部分,所以可以用基类类型的指针指向派生类对象中的基类部分,安全地访问基类部分的成员

weixin_42109053的博客 1941

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

c++ 之 基类与派生类的转换

关键点说明不拷贝对象引用只是别名,操作的是原始派生类对象保留 vptr对象内部的虚表指针仍然指向派生类的虚函数表动态分派虚函数调用通过 vptr 在运行时解析到正确版本避免切片不丢失派生类特有数据和行为语言设计C++ 用“引用/指针 + 虚函数”明确区分值语义和多态语义多态不是“基类能变成派生类”,而是“通过基类接口,操作一个完整的派生类对象”。引用(和指针)是通往这个完整对象的“桥梁”,而对象值只是它的“残影”。你现在不仅知道“怎么做”,更明白了“为什么必须这么做”——这才是真正的 C++ 多态精髓。

老赵的博客 1007

继承,多态(静态多态,动态多态)

动态多态和静态多态

搬砖壮士的博客 1888

关于C++基类、派生类的引用和指针

class A { ...... } class B : public A { ..... } (1)A *pA = new B (2)B b; A &rb=b; 第(1)个是说一个基类的指针指向派生类的实例?这样做有什么意义? 第(2)个是什么意思

coding life 1万+

C++ 基类和派生类的virtual虚析构函数

virtual虚函数与C++的多态息息相关,C++中基类采用virtual虚析构函数主要目的是为了防止潜在的内存泄漏。 具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存...

hanzhen7541的博客 2841

C++基类指针指向派生类(指针)

我们常用基类指针指向派生类对象来实现多态性。 基类指针只能访问到基类中含有的公有成员。 成员如果是数据成员的话访问的是基类的版本(如果派生类中含有相同名字的数据成员的话)。 对于已经被重写的方法成员(如果没有重写则没有什么问题),如果方法成员没有用virtual修饰的话访问的仍然是基类的方法,其他方法对基类方法的调用仍然是基类的方法。如果用virtual修饰以后访问的就是派生类的方法。并且基类的方...

T_T233333333的博客 3795

C++静态多态与动态多态

多态按字面的意思就是多种形态,相同的方法调用,但是有不同的实现方式。多态性可以简单地概括为“一个接口,多种方法,实现接口与实现的分离。 C++有两种多态形式:静态多态:也称为编译期间的多态,编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。 静态多态有两种实现方式: 函数重载 函数重载就像是有多种含义的动词。例如:你可以在棒球场为球队助威(root),也可以在地里种植(root)菌类植物。 根据上下文可以知道每

路过的熊的博客 4224
上一篇: c++第十天(隐藏与覆盖)(面试常问)
下一篇: c++第十二天(友元和运算符重载)
open_python
博客等级 码龄7年 10粉丝 34原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值