C++后端面试(5):模板类

55nm工艺下DDR2与ONFI 3.2高速I/O电路设计实战 在存储接口设计中,工艺节点选择需平衡性能、成本与成熟度,55nm凭借低漏电、高速度及完善PDK成为DDR PHY的黄金节点。高速I/O电路作为混合信号设计核心,需解决信号完整性、时序裕量、功耗与ESD防护等挑战。通过电压模式发送器、自偏置接收器、半速率时钟架构及ZQ校准等关键技术,可在400MHz数据率下实现稳定可靠的DDR2-800与ONFI 3.2 NV-DDR2双协议兼容。这些方法广泛应用于存储桥接芯片、固态存储控制器等场景,为高速接口设计提供工程实践参考。 阅读详情

本文主要参考了C++ Primer 5,模板类和泛型编程

1 背景

模板类产生的背景呢,就是想要创建一个通用的函数模板,模板就和类一样,可以实例化,实例化时不需要任何参考既可以应用char,也可以应用int和double等;
比如:比较int compare(int a,int b)和 函数int compare(double a,double b);
初始想法就是定义多个重载函数的方法;
重载函数,定义的函数除了形参不同,函数内部大体都一样,所以面对这样的问题,有了泛型编程和模板类

对于上面比较大小可以定义一个模板类:

template <typename T> 
//初次接触模板类,可能对这种定义方式比较乱;
//简而言之,可以将  T 看出任意一个类型参数 而typename就是定义这是一个模板参数(个人理解,帮助理解,不是严格的定义)
// 定义完之后 T等同于任何一个参数 包括char int double float,class,vector等
//就像搓麻将时候的赖子,typename  T  目的就是定义牌面是T的牌可以当赖子
//那么以后打牌时,T可以当任意牌打出;
int compare(const T &v1,const T &v2)
{
	if(v1<v2)return -1;
	if(v2<v1) return 1;
	return 0;
}

官方定义:模板定义是以关键字template开始,后跟一个模板参数列表,这是一个逗号分隔的一个或者多个模板参数的列表,用小于号和大于号包围起来<>;

需要注意的就是:
在模板定义中,模板参数不能为空

上面是使用;
下面是模板的实例化;
比如运行了两行代码

cout<<compare(1,0)<<endl; //T当int
vector<int> v1(1,2,3),v2(2,3,4);
cout<<compare(v1,v2)<<endl; //T为vector

实例化函数模板时
T与形参类型的绑定主要是编译器进行完成的;
例如上面两行代码,当我们调用compare时,编译器使用实参的类型来确定绑定到模板参数T的类型;
编译器会用推断出来得到模板参数来为我们实例化一个特定版本的函数。
针对上面梁行代码,编译器会实例化出两个不同版本的compare。

2 模板类型参数

根据第一节,大致了解了什么是模板函数和什么是模板类型参数,上面也演示了如何进行使用模板类型参数。
下面演示,模板类型参数作为函数返回参数的使用方法:

Template <typename T> T foo(T* p)
{
	T tep = *p;
	//
	return tep;
}

注意:`类型参数前必须使用关键字 class或者typename

如

template <typename T,class U> T calc(const T&,const U&);

2.1 类模板

定义类模板

//树上的一个类模板的定义
template <typename T> Class B
{
	public: 
		typedef T value_type;
		typedef typename std::vector<T>::size_type size_type;
		//构造函数
		B();
		B(std::initializer_list<T> Il);
		//
		size_type size() const {return data->size();}
		bool empty() const {return data->empty();
		}
		void push_back(const T &t)
		{data->push_back(t);}
		void push_back(T &&t)
		{
		data->push_back(std::move(t);
		}
		void pop_back();
		//元素访问
		T& back();
		T& operator[] (size_type i);
	private:
		std::share_ptr<Std::vector<T> > data;
		//
		void check(size_type i,const std::string &msg) const;
};
C++ 50道面试题 虚函数是在某个基类中声明,在其派生类中被重写的成员函数。用于实现多态性,简单来说就是,对于不同的类,相同的方法可以采用不同的策略。如果析构函数不是虚函数,那么当一个派生类经由一个基类指针删除的时候,其结果是未定义的,实际实行的时候,通常是对象的派生类部分没有被销毁,而其中基类部分被销毁掉了,就产生了一种局部销毁的现象, 从而造成资源泄漏。为了消除这个问题,就必须在基类中定义virtual的析构函数,从而销毁对象时,才能完整销毁。 阅读详情

相关推荐

C++常见面试题解析:模板与泛型编程

C++面试题

夏天的狂风的专栏 605

C++常见面试题总结

C++常见面试题总结9---STL的数据结构强制类型转换有哪几种?static_castconst_castreinterpret_castdynamic_cast 强制类型转换有哪几种? static_cast 用于数据的强制类型转换,强制将一种数据类型转换为另一种数据类型。 用于基本数据类型的转换。 用于类层次之间的基类和派生类之间 指针或者引用 的转换(不要求必须包含虚函数,但必须是有相互联系的类),进行上行转换(派生类的指针或引用转换成基类表示)是安全的;进行下行转换(基类的指针或引用转换成派生类

yuandenixin的博客 613

【C/C++ 软件开发模拟面试 集】C++ 模板编程 相关知识点模拟面试

【C/C++ 软件开发模拟面试 集】C++ 模板编程 相关知识点模拟面试

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 303

C/C++面试题

智能指针循环引用 解决循环引用的办法: 1.使用弱

weixin_37823499的博客 330

C++实现华为机试103题:深入技术面试编程挑战

C++是一种静态类型、编译式、通用编程语言,由Bjarne Stroustrup在1980年代初期在贝尔实验室开始开发。作为C语言的超集,C++支持过程化编程、面向对象编程以及泛型编程。它广泛应用于系统软件、游戏开发、高性能服务器和客户端开发等领域。函数模板是C++中实现泛型编程的基础,它允许我们创建一个可以在编译时根据类型参数生成函数的模板。使用函数模板可以减少代码冗余,并提供对不同类型的一致操作。下面是一个简单的函数模板示例,实现两个值的交换:T temp = a;a = b;

weixin_42511373的博客 930

Vivado Combinatorial Loop Alert问题 [DRC LUTLP-1]

Vvado综合和布局布线都通过了但是无法生成bit文件,提示Combinatorial Loop Alert,错误如下图。在RTL图中可以看到LUT的输出连接到了输入上,这个就是。在代码中我并未找到导致这种情况发生的地方,如果遇到类似的问题先检查自己的代码是不是存在组合逻辑连接出现了问题,如果没问题再考虑通过设置去解决问题。

伊丽莎白的学习之路 6031

C++面试总结(三)模板与泛型编程

1.什么是模板?    泛型编程是指独立与任何类型的方式编写代码。泛型编程和面向对象编程,都依赖与某种形式的多态。面向对象编程的多态性在运行时应用于存在继承关系的类,一段代码可以可以忽略基类和派生类之间的差异。在泛型编程中,编写的代码可以用作多种类型的对象。面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或静态的多态性。 1)C++提供两种模板机制:函数模板、...

qq_36086861的博客 3446

保姆级教程:在阿里云ECS上用Docker一键部署EMQX MQTT服务器(Ubuntu 20.04)

本文提供在阿里云ECS上使用Docker一键部署EMQX MQTT服务器的详细教程,涵盖从实例创建、Docker环境配置到EMQX部署与优化的全流程。适合物联网开发者快速搭建高效、安全的MQTT消息服务器,适用于智能家居、工业物联网等场景。

weixin_28739079的博客 308

史上最全C/C++面试、C++面经八股文,一文带你彻底搞懂C/C++面试、C++面经!

目录1.讲一讲封装、继承、多态是什么?2.多态的实现原理(实现方式)是什么?以及多态的优点(特点)?3.final关键字的作用是什么?4.虚函数是怎么实现的?它存放在哪里在内存的哪个区?什么时候生成的5.智能指针的本质是什么,它们的实现原理是什么?6.匿名函数的本质是什么?他的优点是什么?7.右值引用是什么,为什么要引入右值引用?8.左值引用和指针的区别?9.指针是什么?10.weak_ptr真的不计数?是否有计数方式,在哪分配的空间。11.malloc的内存分配的方式,有什么缺点?

songbijian的博客 27万+

蛋白组学/磷酸化蛋白组学分析笔记-2

如何校正蛋白丰度?磷酸化组学质谱下机处理。

weixin_43029125的博客 1373

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 728

C++——数组、多维数组、简单排序、模板类vector

本文我们认识数组、多维数组,并熟悉对它们的一些操作。此外,还有模板类vector的相关知识,快来学习一下吧...

HuoZhiyan 的博客 1746

Nvidia Isaac Sim安装与配置 入门教程 2024(2)

Isaac Sim 安装和配置教程将指导用户完成从下载软件到设置和运行仿真的全过程。教程内容包括安装必要的依赖项、配置系统环境、配置Omniverse环境以及调试和优化仿真环境的步骤。通过详细的操作步骤和图文并茂的说明,用户可以快速上手 Isaac Sim,构建出高质量的机器人仿真环境,实现其研究和应用目标。

m0_56661101的博客 2万+

C++后端工程师高频面试题(含解析)

C++服务器开发面试题

m0_60259116的博客 1796

单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

并行通信:传输原理:数据各个位同时传输;优点:速度快; 缺点:占用引脚资源多。是指使用 8、16、32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传输的通讯方式,可以同一时刻传输多个数据位的数据。串行通信: 传输原理:数据按位顺序传输;优点:占用引脚资源少; 缺点:速度相对较慢。是指设备之间通过一根数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,同一时刻只能传输一位(bit)数据。 单工: 数据传输只支持数据在一个方向上传输。信息只能单方向传输的工作方式,一

qq_42475191的博客 1万+

别再只会调速度了!用STM32的定时器中断精准控制伺服电机转角(避坑指南)

本文详细介绍了如何利用STM32的定时器中断和PWM输出实现伺服电机的精准转角控制,避免常见的速度控制误区。通过硬件配置、脉冲计数逻辑和优化技巧的实战讲解,帮助开发者掌握高精度位置控制方法,适用于工业自动化和机器人控制等场景。

weixin_42531163的博客 414

C++面试知识点总结

一.static关键字的作用 1.全局静态变量 在全局变量前加上关键字static,全局变量就定义成一个全局静态变量 静态存储区,在整个程序运行期间一直存在 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化); 作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。 局部静态变量 在局部变量之前加上关键字...

CurryCoder的个人博客 7030

100天精通Python(可视化篇)——第98天:Pyecharts绘制多种炫酷日历图参数说明+代码实战

一、日历图介绍 二、基础配置 1. 配置项类 2. 添加函数 3. 日期标签配置 4. 坐标系配置 三、日历图实战 1. 基础日历图 2. 日历热图

努力让自己发光,对的人才能迎着光而来 2万+

10个C++客户端开发的高频面试题,你会几个?

当准备参加C++客户端开发面试时,了解常见的面试问题是至关重要的。本文将介绍一些常见的C++客户端开发面试问题及其答案,并提供一些有用的技巧和建议。

C语言实战大全 1421

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

这些C++工程师面试题答案收藏好喽

来源:牛客网 编辑:公众号【编程珠玑】 在《这些C++工程师面试题你都会了吗?》分享了一些面试题,应读者强烈要求给出答案,这里给出一部分,答案仅供参考!祝秋招顺利! 说一下static关键字的作用 参考回答: 全局静态变量 在全局变量前加上关键字static,全局变量就定义成一个全局静态变量. 静态存储区,在整个程序运行期间一直存在。 初始化:未经初始化的全局静态变量会被自动...

守望的博客-编程珠玑 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++学习(4)模板类和容器150-189

类模版;C++编译、链接和命名空间;STL容器(重点string、vector、list、map、unordered_map、queue)

qq_59768361的博客 999

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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的博客 2048

搬砖:C++面试100经典

C++面试100经典 2015年10月08日 20:45:05 lycnjupt 阅读数:6439 https://blog.youkuaiyun.com/lycnjupt/article/details/48978643 1. 面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2. 什么是类? 答:把一些具有共性的对象归类后形成一个集合,也...

hunter 630

C++经典面试题(六)

最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。 一是从来没有这个意识,二是没有认真的梳理下。 下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯! 51.在C++中有没有纯虚构造函数?  【标准答案】构造函数不能是虚的。只能有虚的析构函数。 补充一句,有 纯虚的 析构函数

my_adu的专栏 1756

C++实现顺序队列

@这篇文档是由C++代码实现的环形队列 队列就是先进先出的一种数据结构,这篇文档通过数组实现队列,要求是:队列是线性的(即队列的长度初始化后给定了,如果队列插入元素到了最后一个位置表示队列已满不能再插入新的元素,删除元素也只能从队列的队头开始删除),其次队列的插入类型没有定,所以建立的是模板类和函数模板,最后通过调用类模板在main()函数中实现。 本文是以Visual Studio中新建的C++...

u014114763的博客 3627

c++ 面试题

OOP 是一种编程范式,基于对象和类的概念。四大特性:封装:隐藏实现细节,提供接口。继承:从基类派生出新类,复用代码。多态:通过基类指针调用派生类的重写函数。抽象:定义接口而不实现具体细节。虚函数是在基类中使用virtual关键字声明的函数。允许派生类重写该函数,实现运行时多态。通过基类指针或引用调用虚函数时,实际调用的是派生类的实现。纯虚函数是在基类中声明但没有实现的虚函数,语法为。包含纯虚函数的类称为抽象类,不能实例化。派生类必须实现纯虚函数,否则派生类也是抽象类。

twtongwei的博客 1356
上一篇: leetcode(18):字符串统计
下一篇: C++后端面试(6):小问题汇总
CoomCon
博客等级 码龄8年 1100粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

CoomCon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值