C++之函数模板的概念和意义(二)
输出结果:root@txp-virtual-machine:/home/txp# ./a.outa= 5b= 2m= 4n= 6d= Txpt= xiaoping注解:同样实现了交换功能。2、两种方法的优缺点:定义宏代码块-优点:代码复用,适合所有的类型-缺点:编译器不知道宏的存在,缺少类型检查定义函数-优点:真正的函数调用,编译器对类型进行检查-缺点:根据类型重复定义函数,无法diam复用,从上面的试验结果可以看出,我们每次都对Swap()函数进行重新定义,定参数的类型不一致的时候二、泛型编程闪亮出场:1、泛型编程的概念:不考虑具体数据类型的编程方式,我们可以继续拿我们刚才的那个Swap函数进行改造,改成我们现在的泛型写过:void Swap(T& a, T& b){ T t =a; a =b; b =t;}注解:Swap泛型写法中的T不是一个......阅读全文
C++之函数模板的概念和意义(二)
输出结果:root@txp-virtual-machine:/home/txp# ./a.outa= 5b= 2m= 4n= 6d= Txpt= xiaoping注解:同样实现了交换功能。2、两种方法的优缺点:定义宏代码块-优点:代码复用,适合所有的类型-缺点:编译器不知道宏的存在,缺少类型检查定义
C++之函数模板的概念和意义(三)
以下是选择排序算法测试代码 int array[5]={3,5,6,4,9}; Println(array,5); Sort(array,5); Println(array,5); string s[5]={"c","c++","rust","golang","python"}
C++之函数模板的概念和意义(一)
一、函数模板的引出:1、c++中有几种交换变量的方法:(1)定义宏代码块(2)定义函数代码版本一:#include <iostream>#include <string>using namespace std;#define SWAP(t,a,b) do {
C++之拷贝构造函数的浅copy和深copy(二)
(3)注意:在写程序的时候,定义的类对象初始化时看属于哪种类型的:Test t;//对应无参构造函数Test t(1);//对应有参构造函数Test t1;Test t2=t1;//对应拷贝构造函数比如下面我定义的类对象属于无参构造函数(当然前提是你手写了其他构造函数,虽然说编译器会默认提供,但是既
C++之类型转换函数(二)
输出结果:root@txp-virtual-machine:/home/txp# ./a.outd =-200ui= 100(ui+i) = 4294967196Postive注解:通过打印(ui+i)的值我们发现,i原本是int数据类型,这里隐式转换成无符号的数据类型了为了让大家更加理解隐式的转换
C++之拷贝构造函数的浅copy和深copy(一)
一、深拷贝和浅拷贝构造函数总结:1、两个特殊的构造函数:(1)无参构造函数:没有参数的构造函数Class Test{ public: Test() { //这是一个无参构造函数 }};当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空;换句
C++之拷贝构造函数的浅copy和深copy(三)
输出结果:root@txp-virtual-machine:/home/txp# g++ test.cpproot@txp-virtual-machine:/home/txp# ./a.outt1.i = 2, t1.j = 3, t1.p = 0x1528010t2.i = 2, t2.j = 3
C++之拷贝构造函数的浅copy和深copy(四)
输出结果:root@txp-virtual-machine:/home/txp# g++ test.cpproot@txp-virtual-machine:/home/txp# ./a.outt1.i = 2, t1.j = 3, t1.p = 0xb0a010t2.i = 2, t2.j = 3,
C++之静态成员变量和静态成员函数学习总结(二)
说明,这里静态成员变量不能使用初始化列表去初始化,这里要明白上面说的那句话:静态成员变量需要在类外单独分配空间,换句话说,就是只有在类的外部重新定义静态成员变量才可以存储到静态存储区。报错如下:root@txp-virtual-machine:/home/txp# g++ test4.cpptest
C++之静态成员变量和静态成员函数学习总结(一)
上图的板子有最近买的,也有以前买的(stm32、esp8266、51、eps32、小熊派、合宙的cat1、树莓派3b+);说实话,这些板子买来,一直放在那里吃灰,后期自己的方向也不玩硬件开发板啥的;所以上面的板子都送给了公众号读者在校生,让这些板子发挥它们最大的价值,板子也会在最近慢慢一一送出去;赠
C++之静态成员变量和静态成员函数学习总结(三)
3、静态成员函数 vs 普通成员函:静态成员函数普通成员函数所有对象共享YesYes隐含this指针NoYes访问普通成员变量(函数)NoYes访问静态成员变量(函数)YesYes通过类名直接调用YesNo通过对象名直接调用YesYes4、版本代码四:#include <stdio.h>class
C++之类型转换函数(三)
输出结果(没有编译通过)root@txp-virtual-machine:/home/txp# g++ test.cpptest.cpp: In function ‘int main()’:test.cpp:21:14: error: cannot convert ‘Test’ to ‘int’ i
C++之类型转换函数(四)
3、转换构造函数出厂:我们前面学习过构造函数,构造函数它可以定义不同类型的参数;但是我们今天这里所说的转换构造函数的定义时这样的:有且仅有一个参数参数是基本类型参数是其它类型接着我们对上面的普通数据类型转换类类型的代码进行分析:#include <iostream>#include <string>
C++之类型转换函数(六)
2、类类型之间的转换:这个问题也是之前我们上面简单的测试,不能进行类类型之间的转换;现在我们学习了类型转换函数,是可以进行转换的:代码版本一:#include <iostream>#include <string>using namespace std;class Test;class Value{
C++之类型转换函数(一)
一、转换构造函数的学习:1、回忆数据类型转换:在平时写代码的时候,最怕的就是那种隐式数据类型转换了,一不小心,软件就bug不断;而显示数据类型(一般是程序自己去强制类型转换,这个是我们能够明显的识别和掌控的)。为此我们这里总结了一副隐式类型转换的图:下面我们来几个隐式转换的例子:代码版本一:#inc
C++之类型转换函数(五)
输出结果:root@txp-virtual-machine:/home/txp# g++ test.cpptest.cpp: In function ‘int main()’:test.cpp:21:8: error: no match for ‘operator=’ (operand types
C++之类型转换函数(七)
输出结果:root@txp-virtual-machine:/home/txp# g++ test.cpptest.cpp: In function ‘int main()’:test.cpp:42:15: error: conversion from ‘Test’ to ‘Value’ is am
C++之继承中的构造和析构学习总结(二)
代码实践:输出结果:注解:我们可以看到,先定义了一个Child对象,然后最先访问Object带参构造函数,然后再是Parent带参构造函数(说白了就是父类先触发),然后在子类Child中又包含了组合关系(也就是客人),然后Object类中的带参构造函数,最后再触发自身的带参构造函数。二、子类对象的析
C++之操作重载符学习总结(二)
运行结果:上面设计到一些数学知识,比如复数的乘法和除法运算:乘法:(a+bi)(c+di)=(ac-bd)+(bc+ad)i除法:(a+bi)/(c+di)=(ac+bd)/cc+dd +(bc-ad)/cc +dd3、注意事项:C++规定赋值操作符"="只能重载为成员函数操作符重载不能改变原操作符
C++之类模板的深入学习总结
一、类模板的深入学习:1、类模板可以定义任意多个不同的类型参数(这一点和模板函数一样)template < typename T1, typenaem T2 >class Test{public: void add(T1 a, T2 b);}//定义类对象时Test2、类模板可以被特化指定类模
状态函数的概念和应用
状态函数(state function),即指表征体系特性的宏观性质,多数指具有能量量纲的热力学函数(如内能、焓、吉布斯自由能、亥姆霍茨自由能)。主要应用于工程领域。状态函数只对平衡状态的体系有确定值,其变化值只取决于系统的始态和终态。另外,状态函数之间相互关联、相互制约。状态函数按其性质可分为两类
C++之字符串类学习总结(二)
三、字符串与数字的转换:标准库中提供了相关的类对字符串和数字进行转换字符串流类(sstream)用于string的转换相关头文件istringstream字符串输入流ostringstream字符串输出流1、方法使用string---数字数字---string代码示例:输出结果:2、字符串循环右移比
C++之操作符重载学习总结(二)
4、再次改进代码:可以将操作符重载函数定义成为类的成员函数(前面我们学过,友元现代软件开发不允许):比全局操作符重载函数少一个参数(左操作数,成员函数中隐藏的 this 参数可以充当左操作数的角色)不需要依赖友元就可以完成操作符重载编译器优先在成员函数中寻找操作符重载(一旦在成员函数中找到,就不会去
模板链的复制的特点和意义
1.特点:边解旋边复制,半保留复制。2.结果:一个DNA分子复制一次形成两个完全相同的DNA分子。3.意义:使亲代的遗传信息传给子代,从而使前后代保持了一定的连续性……4.准确复制的原因:DNA之所以能够自我复制,一是因为它具有独特的双螺旋结构,能为复制提供模板;二是因为它的碱基互补配对能力,能够使
再论C++中的const和引用(二)
输出结果:root@txp-virtual-machine:/home/txp# ./a.outy = 8p = 0x7ffd78559684代码版本三:#include <stdio.h>int main(){ volatile const int y = 2; int *p =
C++之继承中的构造和析构学习总结(一)
在我们前面学习过类中的构造函数,以及析构函数,那么自然而然,在继承关系中,必然是存在着析构和构造着。一、子类对象的构造1、问题的引出如何初始化父类成员?父类构造函数和子类构造函数有什么关系?2、子类中的构造函数怎样初始化父类成员:子类中也是可以定义构造函数的:--必须对继承而来的成员进行初始化,那么
C++之操作重载符学习总结(一)
一、完善的复数类:在上一篇文章里面我们已经提到了操作符重载的概念和使用,同时也举例了一个数学里面的复数操作,从一开始使用友元到使用操作符重载全局函数,再到使用操作符重载类成员函数,这样一步步演变而成我们最终实现了复数的实部加实部,虚部加虚部;而且当时我们只讲解了一个操作重载符“+”,所以为了完善学习
血型的概念和意义
血型(blood groups;blood types)是以血液抗原形式表现出来的一种遗传性状。狭义地讲,血型专指红细胞抗原在个体间的差异;但现已知道除红细胞外,在白细胞、血小板乃至某些血浆蛋白,个体之间也存在着抗原差异。 因此,广义的血型应包括血液各成分的抗原在个体间出现的差异。通常人们对血型的了
传递函数的零点和极点的物理意义
《传递函数的极点就是微分方程的特征根,因此它们决定了所描述系统自由运动的模态,而且在强迫运动中(即零初始条件响应),也会包含这些自由运动的模态...传递函数的极点可以受输入函数的激发,在输出响应中形成自由运动的模态.传递函数的零点并不形成自由运动的模态,但它们却影响各模态在响应中所占的比重,因而也影
C++之操作符重载学习总结(一)
一、操作符重载:1、我们先来看一个问题实现,下面的复数解决方案是否可行,复数大家应该都不陌生(分为实部和虚部):代码版本一:运行结果:这里通过Add函数可以解决Complex对象相加的问题,但是在我们数学运算里面就是直接实部加实部,虚部加虚部,和正常的实数相加一样,所以说,为什么不直接这样操作呢,这