7 Anthony_tester

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 133

C++模板-30-函数模板注意事项和数组排序练习

前面学习了函数模板,有了一个基本的了解。我们先来学习函数模板,后面还有一个类模板。先看看函数模板使用需要注意哪些事项,然后通过一个数组排序来练习函数模板。1.函数模板注意事项1)自动类型推导,必须推导出一致的数据类型T,才可以使用2)模板必须要确定T的数据类型,才可以使用例子template <typename T>返回类型 函数名称(T a, T b)第一点,编译器会进行自动类型推导,但是上面这个T要类型一致才可以,例如两个参数都是int或者float类型,不可.

2020-06-02 23:14:35

C++模板-29-什么是模板和一个简单的例子

这篇开始进入模板的学习,接下来要学习模板,各种函数模板和类模板,然后学习几个标准的类,例如string类的,然后过度到学习各种容器。1.什么是模板模板就是建立通用模具,大大提高代码复用性。2.没有模板是什么样的例如,我们来做这个小练习,交换两个数的值,例如有两个int类型交换,两个float类型交换。由于前面的知识,代码大概是这样去写。#include <iostream>using namespace std;void SwapInt(int &..

2020-05-26 23:10:04

C++面向对象-28-读写二进制文件

前面学习了对文本文件的读写操作,有了这个基础,我们来学习下,C++对二进制文件的读写操作。因为是二进制,所以不管是读还是写文件,其中打开方式要指定为iso::binary。1.写二进制文件二进制方式写文件主要利用流对象调用成员函数write()函数原型:ostream& write(const char * buffer, int len);参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数来看一个代码例子#include <iostream&.

2020-05-24 22:47:29

C++面向对象-27-读写文本文件

前面学习了多态,现在我们开始学习一些C++的武器,也就是一些常用的类库。程序在运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放。通过文件可以将数据持久化,也就是把数据写入文件,叫序列化,程序读取文件,显示出各种数据。这个过程叫反序列化。这篇开始我们来学习下C++如何读写文件。1.文件分文本文件和二进制文件1)文本文件,文件以文本的ASCII码形式存储在计算机中2)二进制文件,文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。(都是01这样的数据)2.C...

2020-05-24 21:31:46

C++面向对象-26-虚析构和纯虚析构

这篇来学习多态中可能会发生内存泄漏和解决办法,就要使用到虚析构函数和纯虚析构函数。先不介绍概念,肯定和前面学构造函数和析构函数中的析构函数有关系。先通过引出问题,然后介绍这两个概念和特点。1.多态基本代码在前面例子我们可写出一下代码,也没有什么问题#include <iostream>#include <string>using namespace std;class Animal{public: virtual void speak() = .

2020-05-18 23:28:09

C++面向对象-25-纯虚函数和抽象类

前面学习了多态底层原理和多态练习,这篇学习什么是纯虚函数和抽象类。虚函数前面我们介绍过,一个普通的类成员函数前面添加关键字virtual就变成一个虚函数。会有虚函数指针指向虚函数列表的概念,这里纯虚函数肯定和虚函数是有关系的。1.虚函数的定义语法是 virtual 返回值类型 函数名称() = 0;例如,下面这个代码class Base{public: virtual void myFunc() = 0;};一般来说,在使用多态机制的时候,基类中的虚函数里面..

2020-05-18 21:30:51

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

C++面向对象-23-多态原理剖析

前面一篇学习了多态,有静态多态和动态多态之分。动态绑定是第一需要继承关系,第二是子类需要重写父类的函数。什么是重写,从函数返回值,函数名称和参数列表一模一样才叫函数重写。本篇就借助vs 开发工具来捋一捋多态的底层原理。1.两个单词概念在前面多继承的时候,我们也介绍了虚继承,其中使用了virtual,当时有vbptr虚基类指针和vbtable虚基类表,其中作用是vbptr指向了vbtable。这次多态底层原理学习也需要理解类似的两个概念。虚函数指针 vfptr,vritual functio.

2020-05-17 19:19:12

C++面向对象-22-多态基本语法

前面内容学习了继承,在面向对象三大核心概念,我们学习完了封装,继承,剩下一个多态。这篇开始学习多态的基本概念和C++中多态基本使用。1. 多态分两类静态多态:函数重载和运行符重载属于静态多态,服用函数名动态多态:派生类和虚函数实现运行时多态这块的知识点和Java中思想是一样的。例如Java中经常遇到的面试题,你能说一下Java中的多态吗。一般来说标准答案是这样的: 多态是面向对象三大核心,多态就是有多种形态,分两种情况。1)在单个类中,多态的表现为函数的重载,就是共用一个函数名,...

2020-05-17 15:24:09

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

C++面向对象-20-继承中同名静态成员的访问方式

上一篇中介绍了C++中继承中,如果子类和父类出现同名的非静态成员属性和方法的访问方式。如果要访问子类的非静态成员和方法,直接使用子类对象通过点就可以访问;如果想要访问父类的成员属性和方法,就需要使用子类对象点后面跟着父类的作用域才能访问。这篇来看看同名的static成员和方法如何访问,其实方法方式和前面的非静态方式一样。1.静态成员变量的特点1)所有对象共享一个变量2)编译阶段就分配内存3)类内声明,类外初始化2.静态成员属性访问方式代码和前面一篇差不多,就是...

2020-05-16 20:22:17

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

C++面向对象-18-继承中的对象模型和继承中构造和析构顺序

前面一篇学习了继承,知道类子类虽然继承类父类的熟悉,但是不可以访问到父类的私有成员。那么我们先来讨论一个问题,子类是否继承了父类的私有成员变量呢?然后看看继承中子类的构造和父类的构造以及析构函数的执行顺序。1.通过sizeof()函数来证明子类确实继承了父类的私有成员直接来看下面代码#include <iostream>using namespace std;...

2020-02-10 22:41:36

C++面向对象-17-继承

开始学习C++面向对象的第二个特性:继承,前面学习都是类和对象,也就是封装的特点。所有的面向对象的编程语言都有封装,继承和多态这三个基本特性。继承就要了解,父类和子类的概念。意思就是,父类的属性和行为,子类可以继承得到,同时子类可以写一些特有的特性。通常这样去概括:父类在上层,特点是更抽象,子类在底层,特点是更细分和具体。1.继承的语法在C++中继承的语法格式如下class 子类名称...

2020-02-02 23:04:49

C++面向对象-16-关系运算符的重载

继续学习运算符的重载,这篇学习关系运算符的重载。所谓关系运算符就是(<, >, != , ==),就是两个对象比对的关系,一般就是相等,不相等,数值还有大于或者小于。如果是基本数据类型,数值型的话,编译器已经实现。我们要做的事情就是,比较两个自定义对象的关系。1.自定义对象的比对关系例如有一个Person类,类有成员变量age和name,有两个Person类的对象,p1 ...

2020-02-01 23:43:36

C++面向对象-15-赋值运算符的重载

这一篇来学习赋值运算符重载,先来了解什么是赋值运算符,也就是单个等号(=)就是赋值运算符。什么时候,我们需要对赋值运算符进行重载呢?这里面离不开值拷贝的知识。1.C++编译器默认功能C++编译器至少给一个类添加4个函数1.默认构造函数(无参,函数体为空)2.默认析构函数(无参,函数体为空)3.默认拷贝构造函数,对属性进行值拷贝4.赋值运算符operator=,对属性进行值拷贝...

2020-02-01 23:07:35

C++面向对象-14-递增运算符的重载

接着来学习递增运算符的重载,有一个变量i, i++ 这个++符号就是递增运算符。前面学习了几个运算符重载,需要明白的是,对于基本数据类型的运算,我们是不可以进行重载,例如两个int类型的数的加减乘除都不可以进行运算符的重载。我们需要使用运算符的重载是解决一些自定义的数据类型的时候。1.基本整形数据的前置和后置递增我们先来回顾一下整形变量前置递增和后置递增的规律。#include...

2020-02-01 16:06:41

C++面向对象-13-左移运算符的重载

前面一篇学习了加号运算符重载,这篇来学习左移运算符重载,什么是左移运算,符号就是<< , 当然还有右移,符号是>>。有时候我们通过左移/右移来实现自定义数据的输出。1.一个自定义输出场景例如我们有一个Person类,里面有两个属性,age和name, 左移运算符,我们在cout语句中写了很多,例如cout << "Hello World "<...

2020-02-01 00:34:18

C++面向对象-12-加号运算符重载

这篇来学习一下运算符重载,运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。这些运算符重载,包括,加减号,左右移,关系运算符,赋值运算符和递增递减运算符。1.加号运算符重载例如,两个自定义类对象相加,怎么操作?#include <iostream>using namespace std;#include <string&g...

2020-01-31 23:26:28

C++面向对象-11-友元

这篇来学习一个新的知识点:友元。生活中你的家有客厅和卧室,客厅是所有客人都可以进去,但是卧室是私有的,在程序中,客厅就是public权限,卧室是private权限。但是,有一些特殊的,在程序中,有一些被定义成private的属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元技术。友元的目的就是让一个函数或者类可以访问另一个类中私有成员,友元的关键字为friend友元的三种实现...

2020-01-30 00:02:03

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。