C++笔记(三)

C++三大特性笔记 C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对象的使用者和设计者分开, 以提高软件的可维护性和可修改性 特性:1. 结合性,即是将属性和方法结合 2. 信息隐蔽性,利用接口机制隐蔽内部实现细节,只留下接口给外界调用 3. 实现代码重用 继承 定义:继承就是新类从已有类那里得到已有的特性。 类的派生指的是从已有类产生新类的过程。原有的类成为基类或 阅读详情

(1) C++可变参数列表

#ifndef _VA_LIST_DEFINED
    #define _VA_LIST_DEFINED
    #ifdef _M_CEE_PURE
        typedef System::ArgIterator va_list;
    #else
        typedef char* va_list;
    #endif
#endif
#elif defined _M_IX86

    #define _INTSIZEOF(n)          ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1))

    #define __crt_va_start_a(ap, v) ((void)(ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v)))
    #define __crt_va_arg(ap, t)     (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)))
    #define __crt_va_end(ap)        ((void)(ap = (va_list)0))


VA_LIST的用法:
(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;
(2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,使其指向第一个可变参数的地址;
(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);
(4)最后用VA_END宏结束可变参数的获取。使用VA_LIST应该注意的问题:
  (1、可变参数的类型和个数完全由程序代码控制,它并不能智能地识别不同参数的个数和类型;
  (2、如果我们不需要一一详解每个参数,只需要将可变列表拷贝至某个缓冲,可用vsprintf函数;
  (3、因为编译器对可变参数的函数的原型检查不够严格,对编程查错不利.不利于我们写出高质量的代码;
小结:可变参数的函数原理其实很简单,而VA系列是以宏定义来定义的,实现跟堆栈相关。我们写一个可变参数的C函数时,有利也有弊,所以在不必要的场合,我们无需用到可变参数,如果在C++里,我们应该利用C++多态性来实现可变参数的功能,尽量避免用C语言的方式来实现。


(2) 参数在堆栈中的分布:

     在进程中,堆栈地址是从高到低分配的.当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,堆栈地址不断递减,一些黑客就是在堆栈中修改函数返回地址,执行自己的代码来达到执行自己插入的代码段的目的. 总之,函数在堆栈中的分布情况是:地址从高到低,依次是:函数参数列表,函数返回地址,函数执行代码段. 堆栈中,各个函数的分布情况是倒序的.即最后一个参数在列表中地址最高部分,第一个参数在列表地址的最低部分.参数在堆栈中的分布情况如下:

最后一个参数

倒数第二个参数

…

第一个参数

函数返回地址

函数代码段


(3) 指针类型转换

     reinterpret_cast 编译器在编译期处理,任何指针都可以转换成其他类型的指针。

     const_cast 用于将const强制转换成nonconst,将volatile转换成nonvolatile,不能在不同的种类间进行转换

     dynamic_cast 仅能用于指针或引用,不支持内置数据类型,通常在基类和派生类间转换使用,在运行时会检查这个转换是否可能。dynamic_cast<T*>(a) 如果T不是a的某个基类型,则返回一个空指针。

     static_cast<T*>(a) T和a必须是指针、引用、算数类型或枚举类型


(4) Character operator (#@)

     字符化操作符,只能用于有传入参数的宏定义中,且必须置于宏定义体中的参数名前。作用:将传的单字符参数名转换成字符,以一对单引号括起来。

     Stringizing Operator (#)

     作用:将传的参数名转换成一对用双括号括起来的字符串。

     Token-Pasting Operator (##)

     符号连接操作符。将宏定义的多个引参合成一个实际参数名。例如:#define STR(s) #s


【研究生学术英语读写教程翻译 中国科学院大学Unit9】 Unit 9 If Humble People Make the Best Leaders,Why Do We Fall for Charismatic Narcissists? 如果谦逊的人是最好的领导者,为什么我们会爱上魅力型自恋者? 阅读详情

相关推荐

STM32F103+W5500网络通信

STM32F103+W5500网络通信一、W5500模块(一)W5500以太网模块介绍(二)模块排针功能表二、 modbus协议(一)modbus协议原理(二)Modbus 通讯方式1.Modbus三种通讯方式2.在Modbus网络上传输3.以太网(modbus tcp/ip)三、参考资料 一、W5500模块 (一)W5500以太网模块介绍 D-W5500 EVB以太网模块是一款基于WIZnet W5500芯片的以太网模块,且性价比高的以太网模块。W5500是一款全硬件TCP/IP嵌入式以太网控制器,为

”一只特立独行的猪“的博客 1万+

预定义的宏

列出预定义的 ANSI C和C++ Microsoft实现宏。编译器识别预定义的ANSI C宏,并且Microsoft C++实现提供几个更多。 这些宏不带参数,并且不能重定义。下面列出的某些预定义的宏定义与多个值。 请参见下表。有关更多信息。ANSI兼容的预定义宏宏说明__DATE__当前源文件的生成日期。 Mmm dd yyyy." data-guid="c5cbce2c2fd28f54fe1

Augusdi的专栏 4568

.NET 8 组件之IOC容器组件

NET 8中的IOC容器组件继承了前几代的优良传统,并在性能、扩展性、灵活性等方面进行了诸多优化,使得它在现代应用开发中依然保持领先地位。通过合理使用IOC容器,开发者可以更高效地管理依赖关系,编写更加模块化、可维护的代码。随着.NET生态的不断发展,IOC容器将继续扮演关键角色,为开发者提供强大的依赖管理功能。

hy_4377的博客 1530

va_list、va_start、va_arg、va_end宏的使用(转)

当你的函数的参数个数不确定时,就可以使用上述宏进行动态处理,这无疑为你的程序增加了灵活性。Example:CString AppendString(CString str1,...)//一个连接字符串的函数,参数个数可以动态变化{      LPCTSTR str=str1;//str需为指针类型,因为va_arg宏返回的是你的参数的指针,但是如果你的参数为int等简           

坚持,才是力量.老实做人,踏实做事. 3872

Hierarchical Flow Partition(Top-down&&Bottom-up)

hierarchy flow是将设计切分成多个block,分别处理单个block,然后完成后,将它们进行拼接以完成最终的chip。一般划分为三个阶段:chip planning;physical budget就是pin assignmenthierarchy flow实现的方法有两种,一种是top-down,另一种是bottom-up,无论是哪种,都是都要通过flatten的方法分别全局范围进行优化实现。

qq_39493558的博客 3074

AM驱动架构—优质Mini-LED显示技术解决方案

(VR)和增强现实(AR)设备:MiniLED背光驱动方案适用于虚拟现实和增强现实设备中的显示技术,通过高亮度和高对比度的显示效果,创造更逼真的虚拟体验此外,MiniLED背光还能够实现更快的响应速度,减少图像残影,使得用户的动作在虚拟环境中更加流畅自然。以其出色的性能和广泛的应用前景备受关注是实现MiniLED显示效果的重要环节。1)更高的亮度和对比度:尺寸更小,可以在同样面积的显示屏上配置更多的LED,并且通过独立控制每一个MiniLED,可以实现更高的亮度和更细致的对比度,使得显示画面更加鲜明清晰。

isweekDN的博客 2764

预处理器指令 (合集)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 几个特殊的预处理器指令:#error,#line,#imp

理性的幻想 1516

ADAMS软件二次开发:ADAMS软件API接口详解

API(Application Programming Interface,应用程序编程接口)是一种允许不同软件应用程序之间进行交互的接口。在ADAMS软件中,API提供了与软件内部功能直接交互的能力,使用户能够通过编写自定义代码来扩展软件的功能,实现自动化操作或集成到其他系统中。ADAMS软件的API主要基于C++和Python,允许用户通过这些编程语言来访问和控制ADAMS的模型、仿真和分析功能。API接口的使用,需要对编程语言有一定的了解,同时也需要熟悉ADAMS软件的基本操作和模型结构。

kkchenjj的博客 1865

C++学习笔记(1)

<br />预处理器变量的名字在程序中必须是唯一的。任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。<br /> <br />为了避免名字冲突,预处理器变量经常用全大写字母标示。<br /> <br />预处理变量有两种状态:已定义和未定义。定义预处理器变量和检查其状态所用的预处理器指示不同。<br />#define指示接受一个名字并定义该名字为预处理器变量。<br />#ifndef指示检查指定的预处理器变量是否为定义。<br />如果预处理器变量未定义,那么跟在其后面的所有指示都被处理,直

qiume的专栏 1337

Qt实现窗口自适应分辨率大小

如果希望窗口大小始终保持与屏幕分辨率一致,可以将上述代码放在窗口的resizeEvent()函数中。这样,每当窗口大小发生变化时,都会自动调用resizeEvent()函数,从而实现窗口大小的自适应调整。在Qt中,可以通过一些简单的方法实现窗口大小随分辨率变化而自适应调整。获取到当前屏幕的分辨率后,可以根据需要调整窗口的大小。无论在何种分辨率下运行应用程序,窗口都能够正确地自动调整大小,提供更好的用户体验。除了调整窗口大小,还可以考虑将窗口设置为最大化,以充分利用屏幕空间。步骤2:调整窗口大小。

FuJavascript的博客 3658

学Simulink——基于高渗透率可再生能源微电网的逆变器系统场景实例:含高比例逆变型电源的微电网暂态稳定性分析

本文详细介绍了基于MATLAB/Simulink的高渗透率可再生能源微电网建模方法,重点分析含高比例逆变型电源的微电网暂态稳定性问题。通过构建包含光伏、风电、逆变器和电网等模块的系统模型,展示了从项目创建、模块搭建到控制策略实现的完整过程。文章特别提供了逆变器PQ控制算法和故障处理逻辑的代码示例,并介绍了仿真参数设置与结果分析方法。该模型能有效评估微电网在故障条件下的动态响应特性,为优化逆变器控制策略提供依据,对现代智能电网研究具有重要意义。

xiaoheshang_123的博客 141

「C++学习笔记」面向.Net Core的(C++)CLR类库非专业入门(+使用Opencv)

关键词:C++/CLR, .Net Core, .Net Famework, Opencv, C# 有关C++/CLI这块的资料真的很少而且都属于翻墙教程(新手找不到门的,和进了门才能懂的) 参考其他资料,已经微软官方说明,以及新建项目时的项目模板说明: 什么是CLR类库 简单的说: CLR类库,是C++语言的一种扩充,目的是面向C#(.NET)的, 一方面,可以在C++中调用.N...

Raink的博客 7115

【控制模块路径跟踪算法】PID控制算法实现路径跟踪(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对PID控制算法实现路径跟踪–飞思卡尔的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容PID属于无模型控制,调节三个环节的参数会产生什么影响根据控制对象的不同也会有很大差别PID形象解释小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

qq_35635374的博客 2389

《现代C++语言核心特性解析》笔记(三)

二十四、三向比较(C++20) 1. “太空飞船”(spaceship)运算符 C++20标准新引入了一个名为“太空飞船”(spaceship)的运算符 <=>,它是一个三向比较运算符。<=> 之所以被称为“太空飞船”运算符是因为 <=> 让著名的Perl语言专家兰德尔·L.施瓦茨想起1971年的一款电子游戏《星际迷航》中的太空飞船。读者应该也看出来了,<=> 并不是 C++20首创的,实际上Perl、PHP、Ruby等语言早已支持了三向比较运算符,C++是后

川峰的博客 1920

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

深度学习工具包 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")

Cpp学习笔记三

Cpp学习笔记三 try语句 函数参数 函数返回值 生命期 try语句 try语句用于处理程序异常 使用throw抛出异常,在try语句块中出现的异常使用 catch进行捕获 抛出异常 使用throw表达式抛出异常 例如: throw runtime_error("message") 来抛出一个异常 每个标准库的异常类都有一个名为what的函数,返回C风格字符串 try语句块 语法: try { ... } catch(...) { ... } 抛出一个异常时,首先搜寻抛出异常的函数 若

私のBookShelf 185

pscad IEEE标准系统搭建说明

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

【C++笔记】C++三大特性之继承

哈喽,各位小伙伴大家好!上期我们讲了模版的特化及其编译分离。今天我们来讲一下C++三大特性之继承。话不多说,我们进入正题!向大厂冲锋继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的⼿段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。

大白的编程日记. 2035

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【C++笔记】C++三大特性之多态

哈喽,各位小伙伴大家好!上期我们讲了C++三大特性之继承。今天我们来讲一下C++三大特性之多态。话不多说,我们进入正题!向大厂冲锋基于继承多态是⼀个继承关系的下的类对象,去调用同⼀函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象优惠买票。虚函数必须是基类的指针或者引用调用虚函数但是这里父子类的关系并不是那么绝对class Carpublic:public:cout

大白的编程日记. 1667

cpp-netlib笔记三-Cookie支持测试

测试cpp-netlib对Cookie的支持,直接贴代码。

lee353086的专栏 705

C++学习笔记三

C++内置了丰富的数学函数:log(a) :返回参数a的自然对数;pow(a,b):返回a^b次方;hypot(a,b):a,b为直角边,返回斜边c的数值;sqrt(a) :返回a的平方;abs(int):返回整数的绝对值;fabs(2.3):返回浮点数的整数值;floor(a): 返回≤a的最大整数;

m0_67400176的博客 1117

C++ Primer读书笔记梳理系列(三)

C++ Primer读书笔记梳理系列(三) 在我看来这部分的内容,比较底层,也是比较难的,但是非常重要,面试过程中也经常遇到 第13章 拷贝控制 拷贝、赋值与销毁 拷贝控制操作 特殊的成员函数 控制类的行为 拷贝和移动构造函数用同类型的另一个对象初始化本对象时做什么(class a(b)) 拷贝和移动赋值运算符将一...

qq_40028201的博客 225

【C++】cpp学习笔记三 (多态,虚函数,数据抽象,数据封装,接口&抽象类)

C++ 多态 多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。 C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 每个子类都有一个函数的独立实现。这就是多态的一般使用方式。有了多态,您可以有多个不同的类,都带有同一个名称但具有不同实现的函数,函数的参数甚至可以是相同的。 虚函数 虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。 我们想要的是在程序中任

yusihe的博客 260

三、C++提高编程笔记

文章目录1 模板1.1 模板的概念1.2 函数模板1.2.1 函数模板语法1.2.2 函数模板注意事项1.2.3 函数模板案例1.2.4 普通函数与函数模板的区别1.2.5 普通函数与函数模板的调用规则1.2.6 模板的局限性1.3 类模板1.3.1 类模板语法1.3.2 类模板与函数模板区别1.3.3 类模板中成员函数创建时机1.3.4 类模板对象做函数参数1.3.5 类模板与继承1.3.6 类模板成员函数类外实现1.3.7 类模板分文件编写1.3.8 类模板与友元1.3.9 类模板案例2 STL初识2.

zdb 2903

cpp学习笔记(三)

cpp学习笔记(三)16章 标准模板库简介 17章 STL string类 18章 STL动态数组类 19章 STL list 20章 STL set于multiset 21章 STL map和multimap16章 标准模板库简介 存储信息的容器 访问容器存储的信息的迭代器 操作容器内容的算法17章 STL string类 为何需要字符串操作类

逐梦如风-毕康 901

施磊老师c++笔记(三)

模板编程, 容器配置空间allocator

weixin_65612492的博客 1171

C++学习笔记(三)

本文整理了C++编程基础的核心知识点,主要内容包括:1. C++内存管理:详细解析代码区、静态数据区、栈区、堆区的功能特点,介绍内存地址概念及变量存储原理;2. 指针基础:讲解指针的定义与使用、解引用操作、指针类型的内存占用等核心概念;3. const关键字:分析常量变量、常量指针、指针常量等不同用法,区分顶层与底层const;4. 枚举类型:对比传统枚举与C++11强类型枚举(enum class),说明枚举的定义、赋值和使用方法;5. 编程基础:涵盖变量作用域、数据类型、二进制相关概念等基础知识。文章通

ShangguanLuli的博客 1184

C++ Primer 笔记三 变量

C++ Primer 笔记三 变量     变量是命名的对象或引用,提供一个具名的、可供程序操作的存储空间。定义一个变量的基本形式是:首先是类型说明符,然后紧跟由逗号分隔的变量名组成的列表,最后以分号结束。 TYPE objlist; int sum = 0, value; // 定义两个int型变量,同时为sum赋初值为0     在C++中,初始化和赋值是两个完全不同的操作。初始化时创建...

笔记 407
上一篇: C++笔记(一)
下一篇: C++笔记(二)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值