- 博客(1086)
- 收藏
- 关注
原创 C++模板-36-类模板和继承和友元
这里来学习下类模板作为父类,那么子类继承父类是有问题,这种问题是什么,如何解决。然后看看类模板配合友元函数的类内实现和类外实现。1.类模板和继承如果父类是一个模板类,子类继承的时候会有下面几个点需要注意当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型 如果不指定,编译器无法给与子类分配内存 如果想灵活指定出父类中T的类型,子类也需要为类模板先用代码演示1,2点,如果不指定父类T的类型,这个编译错误是什么#include <iostream>.
2020-07-14 23:38:15
484
原创 C++模板-35-类模板对象做函数参数的三种情况
接着来学习类模板作为函数参数传入是如何使用,如果需要把类模板作为参数一起传入到函数中,一般有三种情况,下面分别用代码来解释这三种情况。1.指定传入类型就是在参数中,就指定类型,而不是<class T1, class T2>, 而是直接指定确定类型,例如<string, int>。看下面代码,在printPerson1()就是参数指定特定类型#include <iostream>#include <string>using namespa.
2020-07-12 23:13:53
2926
1
原创 C++模板-34-类模板中成员函数的创建时机
这篇来学习下类模板中普通函数的创建时机。如果是普通的类的成员函数,在类的实例化对象创建过程中就可以创建成员函数。但是在类模板中,成员函数是不会里面创建。因为这里T这个类型如果没有被确定,成员函数是无法创建的,而是这个成员函数在调用的时候才被创建。下面使用代码来证明这个结论。类模板中,成员函数是在被调用的时候才创建代码如下#include <iostream>#include <string>using namespace std;class Person1{
2020-07-12 16:19:43
1377
原创 C++模板-33-类模板和函数模板的区别
这篇开始学习类模板相关知识,本篇主要学习什么是类模板,还有类模板和函数模板的区别1.类模板语法template <class T>类模板声明下面是函数就是函数模板,如果是类就叫类模板2.一个类模板例子下面写一个Person类 类模板,看看如何定义和如何使用类模板#include <iostream>#include <string>using namespace std;//类模板template <class T..
2020-06-11 23:06:45
5145
1
原创 C++模板-32-普通函数和模板函数调用规则
上一篇学习了普通函数和模板函数的区别,这一篇继续学习两者的调用规则。也就是在同一个文件中,如果同时存在普通函数名称和模板函数名称一致,那么两者之间的调用规则是如何。1.如果普通函数和模板函数都可以调用,优先调用普通函数。下面代码,普通函数和模板函数名称一样,传入参数也一致,运行代码是调用模板函数还是普通函数#include <iostream>using namespace std;//模板函数template <class T>void myAdd(T .
2020-06-09 22:42:29
2962
原创 C++模板-31-普通函数和模板函数的区别
前面学习了使用函数模板来实现一个数组排序的例子,基本上体会到了函数模板的好处,就是针对参数类型会自动推导,减少了重复代码。那么函数模板和普通的函数有什么区别呢,本篇来学习这个。1.普通函数调用时可以发生自动类型转换下面来举例一个简单的加法普通函数,看看怎么发生的自动类型转换#include <iostream>using namespace std;//普通函数int myAdd(int a, int b){ return a + b;}void test
2020-06-08 23:07:10
480
原创 C++模板-30-函数模板注意事项和数组排序练习
前面学习了函数模板,有了一个基本的了解。我们先来学习函数模板,后面还有一个类模板。先看看函数模板使用需要注意哪些事项,然后通过一个数组排序来练习函数模板。1.函数模板注意事项1)自动类型推导,必须推导出一致的数据类型T,才可以使用2)模板必须要确定T的数据类型,才可以使用例子template <typename T>返回类型 函数名称(T a, T b)第一点,编译器会进行自动类型推导,但是上面这个T要类型一致才可以,例如两个参数都是int或者float类型,不可.
2020-06-02 23:14:35
386
1
原创 C++模板-29-什么是模板和一个简单的例子
这篇开始进入模板的学习,接下来要学习模板,各种函数模板和类模板,然后学习几个标准的类,例如string类的,然后过度到学习各种容器。1.什么是模板模板就是建立通用模具,大大提高代码复用性。2.没有模板是什么样的例如,我们来做这个小练习,交换两个数的值,例如有两个int类型交换,两个float类型交换。由于前面的知识,代码大概是这样去写。#include <iostream>using namespace std;void SwapInt(int &..
2020-05-26 23:10:04
377
原创 C++面向对象-28-读写二进制文件
前面学习了对文本文件的读写操作,有了这个基础,我们来学习下,C++对二进制文件的读写操作。因为是二进制,所以不管是读还是写文件,其中打开方式要指定为iso::binary。1.写二进制文件二进制方式写文件主要利用流对象调用成员函数write()函数原型:ostream& write(const char * buffer, int len);参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数来看一个代码例子#include <iostream&.
2020-05-24 22:47:29
656
原创 C++面向对象-27-读写文本文件
前面学习了多态,现在我们开始学习一些C++的武器,也就是一些常用的类库。程序在运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。通过文件可以将数据持久化,也就是把数据写入文件,叫序列化,程序读取文件,显示出各种数据。这个过程叫反序列化。这篇开始我们来学习下C++如何读写文件。1.文件分文本文件和二进制文件1)文本文件,文件以文本的ASCII码形式存储在计算机中2)二进制文件,文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。(都是01这样的数据)2.C...
2020-05-24 21:31:46
1161
原创 C++面向对象-26-虚析构和纯虚析构
这篇来学习多态中可能会发生内存泄漏和解决办法,就要使用到虚析构函数和纯虚析构函数。先不介绍概念,肯定和前面学构造函数和析构函数中的析构函数有关系。先通过引出问题,然后介绍这两个概念和特点。1.多态基本代码在前面例子我们可写出一下代码,也没有什么问题#include <iostream>#include <string>using namespace std;class Animal{public: virtual void speak() = .
2020-05-18 23:28:09
1137
2
原创 C++面向对象-25-纯虚函数和抽象类
前面学习了多态底层原理和多态练习,这篇学习什么是纯虚函数和抽象类。虚函数前面我们介绍过,一个普通的类成员函数前面添加关键字virtual就变成一个虚函数。会有虚函数指针指向虚函数列表的概念,这里纯虚函数肯定和虚函数是有关系的。1.虚函数的定义语法是 virtual 返回值类型 函数名称() = 0;例如,下面这个代码class Base{public: virtual void myFunc() = 0;};一般来说,在使用多态机制的时候,基类中的虚函数里面..
2020-05-18 21:30:51
605
原创 C++面向对象-24-非多态vs多态实现计算器
现在基本上知道了什么是多态,接着我们来一个例子使用多态和不使用多态来实现一个小功能的对比。感受下使用多态带来的便利。1.非多态方式实现计算器这里计算器我们就简单描述成两个数的相加,相减和相乘。#include <iostream>#include <string>using namespace std;class Calculator{public: int m_Num1; int m_Num2; int getResult.
2020-05-17 20:22:23
575
原创 C++面向对象-23-多态原理剖析
前面一篇学习了多态,有静态多态和动态多态之分。动态绑定是第一需要继承关系,第二是子类需要重写父类的函数。什么是重写,从函数返回值,函数名称和参数列表一模一样才叫函数重写。本篇就借助vs 开发工具来捋一捋多态的底层原理。1.两个单词概念在前面多继承的时候,我们也介绍了虚继承,其中使用了virtual,当时有vbptr虚基类指针和vbtable虚基类表,其中作用是vbptr指向了vbtable。这次多态底层原理学习也需要理解类似的两个概念。虚函数指针 vfptr,vritual functio.
2020-05-17 19:19:12
278
原创 C++面向对象-22-多态基本语法
前面内容学习了继承,在面向对象三大核心概念,我们学习完了封装,继承,剩下一个多态。这篇开始学习多态的基本概念和C++中多态基本使用。1. 多态分两类静态多态:函数重载和运行符重载属于静态多态,服用函数名动态多态:派生类和虚函数实现运行时多态这块的知识点和Java中思想是一样的。例如Java中经常遇到的面试题,你能说一下Java中的多态吗。一般来说标准答案是这样的: 多态是面向对象三大核心,多态就是有多种形态,分两种情况。1)在单个类中,多态的表现为函数的重载,就是共用一个函数名,...
2020-05-17 15:24:09
318
原创 C++面向对象-21-多继承语法和菱形继承问题
本篇来学习下C++中的多继承,一般来说多继承不建议使用,因为会很容易带来问题。项目中使用的话,需要注意。1.多继承的语法C++中支持多继承,例如有两个父类Base1和Base2,一个子类Sun, 现在子类要同时继承两个父类,语法格式如下多继承语法格式:class 子类 : 继承方式 父类1, 继承方式 父类2#include <iostream>using namespace std;class Base1{public: int m_A = 100;.
2020-05-17 10:26:31
381
原创 C++面向对象-20-继承中同名静态成员的访问方式
上一篇中介绍了C++中继承中,如果子类和父类出现同名的非静态成员属性和方法的访问方式。如果要访问子类的非静态成员和方法,直接使用子类对象通过点就可以访问;如果想要访问父类的成员属性和方法,就需要使用子类对象点后面跟着父类的作用域才能访问。这篇来看看同名的static成员和方法如何访问,其实方法方式和前面的非静态方式一样。1.静态成员变量的特点1)所有对象共享一个变量2)编译阶段就分配内存3)类内声明,类外初始化2.静态成员属性访问方式代码和前面一篇差不多,就是...
2020-05-16 20:22:17
452
原创 C++面向对象-19-继承中同名成员的访问方式
在继承中,如果出现子类和父类有相同的成员变量或者成员函数,那么在子类创建对象后,是如何进行访问的呢,本篇来学习下这个知识点。1.子类和父类有相同名称的成员变量#include <iostream>using namespace std;class Base {public: int m_A = 100;};class A : public Base {public: int m_A = 200;};void test01() { .
2020-05-15 23:10:37
797
原创 C++面向对象-18-继承中的对象模型和继承中构造和析构顺序
前面一篇学习了继承,知道类子类虽然继承类父类的熟悉,但是不可以访问到父类的私有成员。那么我们先来讨论一个问题,子类是否继承了父类的私有成员变量呢?然后看看继承中子类的构造和父类的构造以及析构函数的执行顺序。1.通过sizeof()函数来证明子类确实继承了父类的私有成员直接来看下面代码#include <iostream>using namespace std;...
2020-02-10 22:41:36
710
原创 C++面向对象-17-继承
开始学习C++面向对象的第二个特性:继承,前面学习都是类和对象,也就是封装的特点。所有的面向对象的编程语言都有封装,继承和多态这三个基本特性。继承就要了解,父类和子类的概念。意思就是,父类的属性和行为,子类可以继承得到,同时子类可以写一些特有的特性。通常这样去概括:父类在上层,特点是更抽象,子类在底层,特点是更细分和具体。1.继承的语法在C++中继承的语法格式如下class 子类名称...
2020-02-02 23:04:49
419
原创 C++面向对象-16-关系运算符的重载
继续学习运算符的重载,这篇学习关系运算符的重载。所谓关系运算符就是(<, >, != , ==),就是两个对象比对的关系,一般就是相等,不相等,数值还有大于或者小于。如果是基本数据类型,数值型的话,编译器已经实现。我们要做的事情就是,比较两个自定义对象的关系。1.自定义对象的比对关系例如有一个Person类,类有成员变量age和name,有两个Person类的对象,p1 ...
2020-02-01 23:43:36
676
原创 C++面向对象-15-赋值运算符的重载
这一篇来学习赋值运算符重载,先来了解什么是赋值运算符,也就是单个等号(=)就是赋值运算符。什么时候,我们需要对赋值运算符进行重载呢?这里面离不开值拷贝的知识。1.C++编译器默认功能C++编译器至少给一个类添加4个函数1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)3.默认拷贝构造函数,对属性进行值拷贝4.赋值运算符operator=,对属性进行值拷贝...
2020-02-01 23:07:35
1062
原创 C++面向对象-14-递增运算符的重载
接着来学习递增运算符的重载,有一个变量i, i++ 这个++符号就是递增运算符。前面学习了几个运算符重载,需要明白的是,对于基本数据类型的运算,我们是不可以进行重载,例如两个int类型的数的加减乘除都不可以进行运算符的重载。我们需要使用运算符的重载是解决一些自定义的数据类型的时候。1.基本整形数据的前置和后置递增我们先来回顾一下整形变量前置递增和后置递增的规律。#include...
2020-02-01 16:06:41
1752
5
原创 C++面向对象-13-左移运算符的重载
前面一篇学习了加号运算符重载,这篇来学习左移运算符重载,什么是左移运算,符号就是<< , 当然还有右移,符号是>>。有时候我们通过左移/右移来实现自定义数据的输出。1.一个自定义输出场景例如我们有一个Person类,里面有两个属性,age和name, 左移运算符,我们在cout语句中写了很多,例如cout << "Hello World "<...
2020-02-01 00:34:18
897
原创 C++面向对象-12-加号运算符重载
这篇来学习一下运算符重载,运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。这些运算符重载,包括,加减号,左右移,关系运算符,赋值运算符和递增递减运算符。1.加号运算符重载例如,两个自定义类对象相加,怎么操作?#include <iostream>using namespace std;#include <string&g...
2020-01-31 23:26:28
3290
原创 C++面向对象-11-友元
这篇来学习一个新的知识点:友元。生活中你的家有客厅和卧室,客厅是所有客人都可以进去,但是卧室是私有的,在程序中,客厅就是public权限,卧室是private权限。但是,有一些特殊的,在程序中,有一些被定义成private的属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元技术。友元的目的就是让一个函数或者类可以访问另一个类中私有成员,友元的关键字为friend友元的三种实现...
2020-01-30 00:02:03
420
原创 C++面向对象-10-空指针访问成员函数 和const修饰成员函数
前面学习了this指针,这篇来看看空指针访问成员函数的问题和怎么解决这个问题。然后学习第二个知识点,const修饰成员函数。1.空指针访问成员函数报错先看看这段代码,一个类定义了两个成员函数,第二个函数里面需要访问成员变量。#include <iostream>using namespace std;class Person{public : i...
2020-01-28 22:56:59
284
原创 C++面向对象-9-对象模型和this指针
本篇来学习对象模型和this指针,对象模型主要是了解对象的存储模型。在C++中,类内的成员变量和成员函数是分开存储的,只有非静态成员变量才是属于类的对象上,其他都和类存在不同内存区域。1.一个类的空对象占用内存是多大字节这里我们先写一个代码,通过sizeof()函数来打印一个空的类对象占用内存是多少字节。#include <iostream>using namespac...
2020-01-23 22:40:13
318
原创 C++面向对象-8-静态成员变量和静态成员函数
这篇来学习在一个类中,用关键字static修饰成员变量和成员函数。前面我们知道,一个类主要有两类,一个是属性,也叫类成员变量,还有一个是类的行为,或者叫成员方法。如果在类的成员变量和类的成员方法前面加上关键字static修饰,就变成了静态成员变量和静态成员方法。1.定义静态成员就是在成员变量和成员函数加上关键字static,称为静态成员。2.分类静态成员分为:静态成员变量和静态...
2020-01-18 21:53:15
437
原创 C++面向对象-7- 初始化列表和类对象作为成员
如果我们想要对一个类里面的成员进行赋值操作,前面的学习了有参构造函数,那么我们第一个想到的就是通过有参构造函数进行快速赋值。第二个方法就是先调用无参构造,然后分别对应的set和get方法进行类成员的赋值操作。这里介绍第三种方法,就是在调用有参构造的时候,就进行参数化列表初始化。本篇第二个知识点来学习下,一个类对象作为成员,那么里面的类初始化和外层这个类初始化的先后顺序,调用析构函数的先后顺序是怎么...
2020-01-18 17:30:58
811
原创 C++面向对象-6-深拷贝和浅拷贝
前面一直在学习构造函数,其中拷贝构造我们带出了值传递,拷贝一个对象等概念。这篇来学习一下C++的一个非常容易面试遇到的问题,也就是学习过程中的一个坑。什么是浅拷贝和深拷贝,两者的区别是什么。浅拷贝:简单的赋值拷贝操作前面我们学习的拷贝构造函数就是浅拷贝根据前面的代码,我们把Point换成Person类#include <iostream>using names...
2020-01-12 23:43:04
645
原创 C++面向对象-5-类的构造函数调用规则
继续来学习构造函数的知识,通过前面学习,我们知道一个类中可以有 无参构造,有参构造,拷贝构造,那么编译器是如何决定调用这些构造函数,本篇就来学习这个调用规则。知识点:默认情况下,C++编译器至少给一个类添加3个函数1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)3.默认拷贝构造函数,对属性进行值拷贝构造函数的调用规则如下:如果用户定义有参构造函数,c++...
2020-01-12 16:07:43
1942
原创 C++面向对象-4-拷贝构造函数的调用时机
继续来学习构造函数,前面一篇学习了拷贝构造函数,至少了解了什么是拷贝构造函数,这篇就来学习下拷贝构造的使用。什么时候会使用到拷贝构造函数呢?大概可以分成三种场景:使用一个已经创建完毕的对象来初始化一个新对象 值传递的方式给函数参数传值 以值方式返回局部对象使用一个已经创建完毕的对象来初始化一个新对象这个很好理解,主要是前面已经花了经历去构造一个对象,如果我们再来一个这样的对象,...
2020-01-11 23:19:34
373
原创 C++面向对象-3-构造函数的分类和调用
前面一篇学习了类的构造函数和析构函数,两者都是编译器自动调用一次,构造函数是在类初始化的时候调用,析构函数是类在销毁之前调用。这篇继续学习类的构造函数分类和调用。前面学习过了无参构造,这篇要学习有参构造,和拷贝构造。有参构造继续使用前面的代码例子#include<iostream>using namespace std;class Point{pub...
2020-01-11 22:15:02
607
原创 C++面向对象-2-类的构造函数和析构函数
上一篇学习了C++中的类定义,用了两个练习题来演示一个class的属性和行为的定义和调用,以及展开了权限控制和一个类的属性还可以是其他类的一个实例。其中有好多代码是set和get, 写多了有时候很烦,当然写set和get方法是一个好习惯。例如Point,我们需要setX和setY, 有没有一个方法直接SetPoint(X,Y)呢, 这个就本篇要学习的类的构造函数。区别:struct vs...
2020-01-11 20:42:46
1062
原创 C++面向对象-1-类和对象以及封装
新的公司,做之前没有做过的工作,全新的开始。由于项目是C++代码写的桌面版设计软件,所以作为测试开发,需要去做C++的白盒和SDK的API自动化测试。虽然,学习过Java这门面向对象编程语言,当前看C++的源码还是很吃力,所以打算,学习一下C++的面向对象部分。写博客,仅仅是督促我自己学习的一个方法,平时不做总结,只好通过写博客来记录学习过程,学习多了,自然就会产生总结和提炼,这需要...
2020-01-11 18:33:54
854
原创 Maven入门-7-Maven如何创建web动态工程和依赖范围介绍
这篇来看看如何在Eclipse上正确的基于Maven创建一个web动态项目。默认创建web动态项目是缺少内容,需要我们手动修改一下。然后来学习一下依赖中的范围。1.Maven默认创建web工程效果打开Eclipse,我们来创建一个maven工程,其实maven创建java工程和web工程在界面上就一个简单区别。在packaging这里选择有三项,如果选择jar,创建的mave...
2019-09-08 22:10:31
1693
原创 Maven入门-6-Maven的生命周期和核心命令详细介绍
本篇来介绍Maven的生命周期和前面介绍过几个命令的详细介绍过程。先介绍生命周期,生命周期中不同阶段就包括了一些命令,所以理解了生命周期,再来看看每一个命令的详细使用过程。1.Maven的生命周期分类Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化执行构建命令了。Maven有三套相互独立的生命周期,分别是1)Clean Lifecycle 在进行真...
2019-09-08 15:05:20
1570
原创 Maven入门-5-Maven几个核心概念
可以这么说,前面4篇Maven入门的文章其实是没有入门,只不过可以让我们学会简单地创建Maven项目。但其实,之前我们这么做不是不可以,确实有很多不规范和缺陷的地方。本篇从介绍Maven的几个核心概念开始,继续来完善这个Maven入门系列文章,达到更好掌握Maven这个自动化构建工具的目的。这里说到了自动化构建工具,作为测试或者测试开发应该要有兴趣。可以说,如果你是Java开发或者测试开,你对...
2019-09-08 11:41:58
1069
原创 RestAssured接口自动化从入门到框架搭建-22-框架组装-基类修改和post举例和报告获取
接着来完善我们的Rest Assured框架,我在github上搜索到了一些国内和国外的基于Rest Assured写的java语言的接口自动化框架。基本上就是分两种。第一种就是采用excel文件来写接口用例,然后TestUtils中写一个poi读取excel文件的方法。这种思想是数据驱动,框架本身和用例代码很少,核心就是一个一个读取excel中的接口测试用例。第二个类型,就是我们这里介绍的风格。...
2019-09-06 22:05:35
3034
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人