C++多态性及容器存放指针类型,虚函数,虚析构函数,迭代器的使用实例

C++中STL用法超详细总结 目录 1 什么是STL? 2 STL内容介绍 2.1 容器 2.2 STL迭代器 2.3 算法 2.4 仿函数 2.4.1 概述 2.4.2 仿函数(functor)在编程语言中的应用  2.4.3 仿函数在STL中的定义 2.5 容器适配器 2.5.1 stack 2.5.2 queue & priority_queue 3 常用容器用法介绍  3.1 vec... 阅读详情

C++多态性及容器存放指针类型,虚函数,虚析构函数,迭代器的使用实例

代码如下,可以直接运行:

#include <iostream>
#include <list>
using namespace std;
class A
{
public:
    A(){}
    virtual ~A(){}
    void setIndex(int index)
    {
        m_index = index;
    }
    int getIndex()
    {
        return m_index;
    }
    virtual void printIndex()
    {
        std::cout << "A:" << m_index << std::endl;
    }

private:
    int         m_index;
};

class B : public A
{
public:
    B(){}
    ~B(){}

    void printIndex()
    {
        std::cout << "B:" << getIndex() << std::endl;
    }

private:
    int         m_externIndex;
};


void transferParameter(const std::list<A *> &lstValue)
{
    std::list<A *>::const_iterator it = lstValue.begin();
    while (it != lstValue.end())
    {
        (*it)->printIndex();
        ++it;
    }
}

void deleteList(std::list<A *> &lstValue)
{
    std::list<A *>::iterator it = lstValue.begin();
    while (it != lstValue.end())
    {
        A *p = *it;
        delete p;
        p = NULL;
        ++it;
    }
    lstValue.clear();
}

class Test
{
public:
    Test(){}

    void start()
    {
        std::cout << "---------------A---------------" << std::endl;
        std::list<A *> lstValue;
        for (int i = 0; i < 3; ++i)
        {
            A *p = new A;
            p->setIndex(i);
            lstValue.push_back(p);
        }

        transferParameter(lstValue);
        deleteList(lstValue);
        std::cout << "---------------B 1---------------" << std::endl;

        lstValue.clear();
        for (int i = 0; i < 3; ++i)
        {
            B *p = new B;
            p->setIndex(i);
            lstValue.push_back(p);
        }

        transferParameter(lstValue);
        deleteList(lstValue);
        std::cout << "---------------B 2---------------" << std::endl;
        for (int i = 0; i < 3; ++i)
        {
            A *p = new B;
            p->setIndex(i);
            lstValue.push_back(p);
        }
        transferParameter(lstValue);
        deleteList(lstValue);
    }
};

int main()
{
    Test test;
    test.start();
    return 0;
}

运行结果如下:

C++基础知识归纳(1)-大厂必备八股文篇 共享数据的保护: 常引用:使所引用的形参不能被更新 void display(const double& a); 常对象:在生存期内不能被更新,但必须被初始化 A const a(3,4); 常成员函数:不能修改对象中数据成员,也不能调用类中没有被const 修饰的成员函数(常对象唯一的对外接口).如果声明了一个常对象,则该对象只能调用他的常函数!->可以用于对重载函数的区分; void print(); void print() const; extern int a:使其他文件也能访问该 阅读详情

相关推荐

C++ STL容器全解析:从基础类型到智能指针的存储实践

在C++编程中,数据结构和算法是构建高效软件的核心基础。通过泛型编程思想,开发者可以创建独立于数据类型的通用组件,实现代码的高度复用和类型安全。标准模板库(STL)正是这一思想的典范,它将常用的数据结构和算法封装为模板,通过迭代器实现容器与算法的解耦,极大提升了开发效率和程序性能。在工程实践中,STL容器如vector和map能够有效管理动态数组和键值对,避免手动内存管理的繁琐与风险。对于自定义类对象,STL要求类型满足可拷贝构造和可赋值的基本要求,同时通过移动语义和emplace_back等现代C++特性

weixin_30861797的博客 417

C++ STL : 空间配置器——构造和析构的基本工具construct和destroy

对STL空间配置器中 构造和析构的基本工具进行讲解 construct 和 destroy

Sauron7i的博客 1576

Altera Cyclone4 EP4CE15F17C8核心板硬件设计避坑指南(附AD09工程文件)

本文深入解析Altera Cyclone4 EP4CE15F17C8核心板硬件设计中的关键问题与解决方案,涵盖电源架构优化、信号完整性处理、热设计及生产调试要点。特别提供经过验证的AD09工程文件,帮助开发者规避常见设计陷阱,提升FPGA项目的成功率与可靠性。

weixin_29159441的博客 295

C++day06容器和多态

一、多态抽象概念 * 一般基类实例化没有意义,所以制作成抽象类 * 动态多态条件: * 1.必须是继承关系 * 2.父类必须定义虚函数 * 3.子类必须重写父类的虚函数实现 * 注意:尽量在多态中使用虚析构 * 抽象类的条件: * 1.父类必须定义为纯虚函数,所以父类无法实例化对象 * 2.子类必须重写父类的纯虚*函数,否则子类也是一个抽象类,就不能实例化对象了 * 使用条件: * 1.父类指针或引用指向子类对象 ...

qq_69809412的博客 400

别怕,“卷积”其实很简单

首先给大家讲一个关于卷积的小故事:小明是杭州某互联网大厂的员工,每天996十分辛苦,但小明最近爱上了打台球,经常不在工位。这天,小明的主管让小明改一个需求,小明却到楼下找产品部小丽打台球去了,被主管发现,他非常气愤,扇了小明一巴掌(注意,这就是输入信号,脉冲)。于是小明脸上会渐渐地(贱贱地)鼓起来一个包,小明的脸就是一个系统,而鼓起来的包就是小明的脸对巴掌的响应。好,这样就和信号系统建立起来意义对应的联系。

Machine Learning with Tutors 3176

UniApp X 网络请求避坑指南:从 JS 到 UTS 的 JSON 数据处理全解析

摘要:UniAppX开发中处理JSON数据时,UTS强类型特性要求开发者改变JS习惯。本文对比两种主流方案:1)UTSJSONObject通过keypath访问数据,兼容JS但缺乏类型提示;2)type+泛型方案,通过定义数据类型实现强类型校验和智能提示,推荐用于固定数据结构。文章详细演示了两种方式的具体实现、转换方法及实战案例,并提供了类型定义技巧和注意事项,帮助开发者编写更稳定高效的跨平台应用。

归梦工作室 2787

C++迭代器(STL迭代器)iterator详解

转自http://c.biancheng.net/view/338.html。侵删。 要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。 迭代器按照定义方式分成以下四种。 1) 正向迭代器,定义方法如下: 容器类名...

又帅又酷的红头发10号 1万+

聚类模型-层次聚类

聚类模型 1、层次聚类 2、原型聚类-K-means 3、模型聚类-GMM 4、EM算法-LDA主题模型 5、密度聚类-DBSCAN 6、图聚类-谱聚类 一、层次聚类 一、聚类理论 ​ 一般来说,聚类是在训练样本的标签信息不知的情况下,学习样本内在的性质和规律,将有限的集合划分成ccc类。根据“方以类聚,物以群分”的思想,类内对象尽可能的相似,...

myazi 6502

C++实验课任务(多态--容器--算法)

C++实验课任务(多态–容器–算法) 题目的基本实现 代码如下(具体细节处的分析见代码中/**/里的部分): #pragma once #include <string> #include <iostream> #include <vector>//【请填写代码:调用STL中vector容器所需要的头文件】 #include <algorithm>//【请填写代码:调用STL中sort算法所需要的头文件】 using namespace std; //这是

leihao-lester 607

2024年数字IC秋招-华为机试-数字芯片-实习笔试题

笔试题目:40个选择题A.综合时不同文件列表内的宏定义仅在本列表生效B.宏定义会覆盖,不需要单独undefC.仿真时出现宏定义冲突以最后一次值为准D.宏定义最好在各文件中随用随定义A.4/9B.4/6C.01D.0/6。

qq_42135020的博客 2891

OpenOCD入门到精通:第20章 Target 子系统源码分析

摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。

从事嵌入式linux android驱动开发,拥有全栈能力 176

迭代器模式

迭代器模式 在GOF的《设计模式:可复用面向对象软件的基础》一书中对迭代器模式是这样说的:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。 一个聚合对象,就是所谓的对象容器了;作为一个容器,都应该提供一种方法来让别人可以访问它的元素;但是,有的时候,我是不希望遍历容器的人知道我的容器是如何实现的;那该怎么办?就像我在大学那样实现的链表,只提供了从头到尾的遍历,如果我...

weixin_34235105的博客 163

在 SAP Fiori 中正确配置 Group 角色:从 PFCG 分配到首页呈现的完整链路

摘要:SAP Fiori项目中,用户登录后能否看到应用往往取决于角色配置而非前端开发。关键在于通过PFCG角色将launchpad designer中创建的tile group关联到用户角色。Catalog是应用池,group是用户首页可见的工作区。正确配置后,用户会看到角色对应的默认分组,同时保留个性化调整能力。项目实施中常见问题是应用开发完成但未正确配置group与角色关联,导致业务用户无法在首页看到应用入口。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 164

C++学习 虚函数,容器

泛型算法允许我们编写通用代码,能够适用于不同的容器和数据类型。C++ STL 中提供了丰富的泛型算法,如查找、排序、变换、复制等操作。泛型算法通过迭代器来与容器交互,使得它们与具体容器解耦,能够处理不同类型的容器。通过使用模板、迭代器和 Lambda 表达式,我们可以轻松地自定义和扩展泛型算法。

m0_51830537的博客 1027

YOLOv12改进策略【独家融合改进】| SPD-Conv+PPA 再次提升模型针对小目标的特征提取能力

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1026

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

c++ | 类的多态性与虚函数

一、多态性概述 使用同一个名字定义不同的函数,即使用同样的接口访问功能不同的函数。 eg:函数重载和运算符重载就实现了类的多态性 c++实现的多态有两种: 编译时多态:函数重载、运算符重载、模板; 运行时多态:借助虚函数实现。 二、静态联编和动态联编 联编:一个源程序需要经过编译、连接才能成为可执行的代码。上述过程中需要将一个函数调用链接上相应的函数代码(即在主函数中调用了某一函数,根据函数名及参数表找到相应函数体的过程),这一过程成为联编。 静态联编:在程......

weixin_61756086的博客 1800

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

虚函数等的学习中的记录

纯属函数 1纯虚函数只有函数名字,不具有函数功能,不能被调用。 2if派生类中没有对纯虚函数定义,则该虚函数在派生类中仍然为纯虚函数。 抽象类 1 该类中需含有一个纯虚函数 2 不能直接创建对象实例 3 可使用指向抽象类的指针支持运行时的多态性(可以声明抽象类的指针和引用) 虚函数 1 运行时多态必须通过基类对象的引用或指向基类对象的指针的调用才能实现虚函数呈现的动态确定调用版本功能 2 虚函数必须是类的普通成员函数、不能是友元函数、不能是静态成员函数 虚析构函数 1 为何是使用虚析构函数:如果基类析构函数

m0_51501677的博客 2707

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++笔记——c++编程思想(上)多态性、虚函数与模板

1. 每当创建一个虚函数的类,或从有虚函数的基类派生出一个子类时,编译器就为这个基类创建了一个唯一的虚函数表,在这个表中,编译器存放了这个类中及其基类声明的所有虚函数的地址,若子类虚函数对父类进行了重定义,则存子类虚函数的地址,否则存父类虚函数的地址。子类对父类中虚函数进行重定义时,不需要用virtual,只要一个函数在某处声明为Virtual,则一直为Virtual,子类不需要再声明。2.

zhangren07的专栏 1335

Day2 继承 虚函数 迭代器萃取

继承 虚函数 迭代器

qq_41895640的博客 242

咱们一起学C++ 第二百九十三篇C++容器、多态与模板函数的深度探索

嗨,各位C++编程爱好者们!学习编程的过程就像一场充满挑战的冒险,一路上有难题,也有收获。我深知独自摸索的艰辛,所以希望借这些博客,和大家一起学习、共同进步。在交流分享中,咱们能更高效地掌握C++知识,攻克编程路上的重重关卡,今天就让我们一同深入探索C++中容器、多态与模板函数的奇妙之处。

wj_rdk的博客 1284

面试题-C++软件/客户端开发

目录 C/C++ C 和 C++ 的区别 new 和 malloc 的区别 对虚函数的理解 STL if(i==3) 与 if(3==i) 哪个写法更好,为什么? 简述匈牙利命名法。 for 循环中语句中使用++i 与使用 i++哪个更好,为什么(当 i 不是基本类型,而是一个类类型时) 简述静态成员函数与普通成员函数,静态全局变量与普通全局变量,静态局部变量与普通局部变量...

ai_XZP_master 7859

复习笔记-CPP基础

文章目录基本语言1. static关键字的作用2. C++和C的区别5. c++四种cast转换6. C/C++指针和引用的区别8. C++的四个智能指针11. 野指针13. 智能指针是否存在内存泄漏17. 析构函数是否必须是虚函数?C++默认的析构函数为什么可以不是虚函数?18. 函数指针20. C++中的析构函数21. 静态多态、动态多态22. 重载和覆盖25. 虚函数的实现26. 举例:在m...

virgilshi的博客 385

C++ STL使用

文章目录C++ STL使用一、什么是STL二、STL内容介绍2.1 STL中六大组件2.2 容器2.3 迭代器2.4 算法2.4.1 算法分类2.5 仿函数2.5.1 仿函数(functor)在编程语言中的应用2.5.2 仿函数在STL中的定义2.6 容器适配器2.6.1 stack2.6.2 queue & priority_queue三、常用容器用法介绍3.1 vector3.1.1 基本函数实现3.1.2 基本用法3.1.3 实例3.2 deque3.2.1 声明deque容器3.2.2 de

u012477435的博客 2692

C++学习

C++ Primer 学习

银晗的学习博客 1401

C++面试总结(持续更新)

C++面经总结1 C++基础1.1 C和C++的区别?1.2 指针和引用的区别1.3 new/delete与malloc/free的区别 1 C++基础 1.1 C和C++的区别? 回答一: C是面向过程的语言,C++是面向对象的语言 C++使用new和delete对内存分配的运算符,取代了c中的malloc和free C++中有引用的概念,C中没有 C++中引入类的概念,C中没有 C++有函数重载,C中不能 C只能在函数的开头处声明和定义,C++随时定义使用 回答二: 设计思想上: C++是面向对象

catkin_ws的博客 2041

C++错题积累(日记)

构造函数可以有多个且可以带参数,而析构函数只能有一个且不能带参数假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:在类型转换函数的定义中不需要声明返回类型不是所有的运算符都可以重载。例如,sizeof 运算符不能被重载。运算符重载不能创建新的运算符,只能改变现有运算符的行为重载前置运算符"++",则++c(c为对象)相当于执行了operator++()前置运算符++直接作用于对象本身,不需要额外的参数来指定操作的类型或顺序。

Kaipoluo的博客 1411
上一篇: pdfium下载地址
下一篇: Qt实现系统托盘 托盘菜单 托盘提示 托盘闪烁 任务栏提示 
一杯橙咖
博客等级 码龄14年 81粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值