快速排序

C++快速入门 第四十二讲:链接和作用域

与作用域有关的另一个概念是链接,当同时编译多个文件时,每个源文件被称为一个翻译单元,在某一个翻译单元里定义的东西在另一个翻译单元里使用正是链接发挥作用的地方。 存储类(storage class):每个变量都有一个存储类,它决定着程序将把变量的值储存在计算机的什么地方、如何存储、以及变量应该有怎样的 ......
作用 链接

C++快速入门 第四十三讲:链接和作用域2

1 header.h文件 2 3 #ifndef HEADER_H 4 #define HEADER_H 5 6 unsigned long returnFactorial(unsigned short num); 7 static const unsigned short headerNum = ......
三讲 作用 链接

C++快速入门 第四十四讲:函数模板swap使用

泛型编程技术支持程序员创建函数和类的蓝图(即模板,template),而不是具体的函数和类。 标准模板库STL(Standard Template Library),STL库是泛型编程技术的经典之作,它包含了许多非常有用的数据类型和算法。 当拥有一个模板时,编译器将根据模板自动创建一个函数,该函数会 ......
函数 模板 swap

C++快速入门 第四十一讲:命名空间

命名空间其实就是由用户定义的范围,同一个命名空间里的东西只要在这个命名空间里具有独一无二的名字就行了。 例如: 1 namespace author 2 3 { 4 5 std::string person; 6 7 } 8 9 namespace programmer 10 11 { 12 13 ......
空间

C++快速入门 第三十九讲:命名空间和模块化编程

模块化:把程序划分成多个组成部分(即所谓的模块)。这是通过把程序代码分散到多个文件里,等编译程序时再把那些文件重新组合在一起实现的。 C++预处理器的#include指令提供了一种能够让编译器在编译主程序时把其他文件的内容包括进来的机制。例如用这个指令来包括iostream头文件。 实例:头文件应用 ......
模块 空间

C++快速入门 第四十讲:命名空间与模块化编程2

利用C++预处理器,我们可以让头文件只在这个类还没有被声明过的情况下才声明它。作为一种固定模式,这里使用常量名通常与相应的文件名保持一致(换成大写),把句号替换为下划线。例如rational.h文件对应RATIONAL_H 1 Rational.h文件 2 3 //Ration.h 4 //Crea ......
模块 空间

C++快速入门 第三十八讲:避免内存泄漏

如果程序会运行很长时间(例如在服务器上,注意不是所有的操作系统都像windows一样每天都要重启),并且在不停地申请新的内存块,忘记释放那些已经不再有用的老内存迟早会把内存消耗殆尽,直接导致后边的new操作无法执行甚至崩溃。 动态内存是没有作用域的,所以必须由程序员来跟踪它们的使用情况,并在不需要用 ......
内存

C++快速入门 第三十六讲:副本构造器

我们可以把一个对象赋值给一个类型与之相同的变量,编译器将生成必要的代码把“源”对象各属性的值分别赋值给“目标”对象的对应成员。这种赋值行为称之为逐位复制。(但如果某些成员变量是指针的话,对象成员逐位复制的结果是你将拥有两个一模一样的实例,而这两个副本里的同名指针会指向相同的地址) 实例1:带指针变量 ......
副本

C++快速入门 第三十七讲:高级强制类型转换

实例1:静态强制转换 1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 class Company 6 { 7 public: 8 Company(string theName,string product); ......
类型

C++快速入门 第三十四讲:动态数组

虽然前面讲过的用new给基本类型和对象在运行时分配内存,但它们的尺寸在编译时就已经确定下来——因为我们为之申请内存的数据类型在程序中有明确的定义,有明确的单位长度。 但有些时候,必须等到程序运行时才能确定需要申请多少内存,甚至还需要根据程序的运行情况追加申请更多的内存。 例如: int *x = n ......
数组 动态

C++快速入门 第三十三讲:动态的内存管理

到目前为止,所讲解的每个示例程序在完成它的任务时所使用的内存空间都是固定不变的。不能在程序运行期间动态增加或减少内存空间(即静态内存)。 在很多时候,需要存储的数据量到底有多大在事先往往是一个未知数,想要处理好这类情况,就需要在C++程序里使用动态内存。 动态内存由一些没有名字、只有地址的内存块构成 ......
三讲 内存 动态

C++快速入门 第三十五讲:从函数或方法返回内存

在函数里调用new语句为某种对象或某种基本数据类型分配一块内存,再把那块内存的地址返回给程序的主代码,主代码将使用那块内存并在完成有关操作后立刻释放。 实例1:函数或方法返回内存 1 #include <iostream> 2 using namespace std; 3 4 int *newInt ......
函数 内存 方法

C++快速入门 第二十一讲:静态属性和静态方法

面对对象编程技术的一个重要特征是用一个对象把数据和对数据处理的方法封装在一起。 在前面的例子里,我们一直是在使用对象(也可以说某个类的实例)来调用方法,每个方法只处理调用它的那个对象所包含的数据,所有的数据都属于同一个对象。 C++允许我们把一个或多个成员声明为属于某个类,而不是仅属于该类的对象。( ......
静态 属性 方法

C++快速入门 第二十九讲:虚继承

通过虚继承某个基类,就是在告诉编译器:从当前这个类再派生出来的子类只能拥有那个基类的一个实例。 虚继承的语法: 1 class Teacher:virtual public Person 2 3 { 4 5 } 这样做的话便可以让Student和Teacher类都虚继承自Person类,编译器将确保 ......

C++快速入门 第三十讲:错误处理和调试

程序出错可以分为两大类:编译时出错(complie-time error)和运行时错误(run-time error) suggest1:培养并保持一种编程风格 suggest2:认真对待编译器给出的错误/警告信息 suggest3:写代码三思而后行(先画流程图) suggest4:注意检查最基本的 ......
错误

C++快速入门 第三十一讲:错误处理与调试2

让函数返回错误代码 实例:范围限制 1 #include <iostream> 2 #include <climits> 3 4 using namespace std; 5 class Factorial 6 { 7 public: 8 Factorial(unsigned short num); ......
错误

C++快速入门 第二十八讲:多继承(multiple inheritance)

1 多继承语法: 2 3 //助教类既继承于老师类,又继承于学生类 4 class Assistant:public Teacher,public Student 5 { 6 }; 7 8 当遇到的问题无法只用一个“是一个”关系来描述的时候,就是多继承出场的时候。例即是学生,又是人,还是助教。 9 ......
inheritance multiple

C++快速入门 第三十二讲:assert函数和捕获异常

C语言和C++都有一个专门为调试而准备的工具函数 assert函数。这个函数是在assert.h库文件里定义的。 实例1:assert函数应用 1 #include <cassert> 2 //assert()函数需要有一个参数,它将测试这个输入参数的真或者假状态 3 //如果为真 Do nothi ......
函数 assert

带你快速上手HetuEngine

本文分享自华为云社区《【手把手带你玩转HetuEngine】(一)HetuEngine快速上手》,作者:HetuEngine九级代言。 HetuEngine是什么 HetuEngine是华为推出的高性能交互式SQL分析及数据虚拟化引擎。与大数据生态无缝融合,实现海量数据秒级交互式查询;支持跨源跨域统 ......
HetuEngine

C++快速入门 第二十七讲:运算符左移<<重载

一般来说,在调用operator<<()重载函数时,传递给它的是哪一个流,它返回的就应该是那个流的一个引用。 实例:左移操作符重载 1 #include <iostream> 2 #include <string> 3 #include <math.h> 4 5 using namespace st ......
运算符 lt

C++快速入门 第二十五讲:运算符的重载

所谓重载,就是重新赋予新的含义,函数重载是对一个已有的函数赋予新的含义。 运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该运算符。也就是说,运算符重载是通过定义函数实现的,运算符重载实质是是函数的重载。 实例1:复数加法 1 #include <iostrea ......
运算符

C++快速入门 第二十四讲:抽象方法抽象方法(abstract method,也可以成为纯虚函数)

实例1:抽象方法应用 1 //int *pointer = new int;//声明一个整型指针,并在程序运行时将它指向分配的内存空间 2 //delect *pointer;//删除指针,释放内存 3 #include <iostream> 4 #include <string> 5 6 usin ......
方法 函数 abstract method

C++快速入门 第二十三讲:虚方法

TIPS: 引发问题的源头是我们使用了new在程序运行的时候才为dog和cat分配Dog类型和Cat类型的指针。这些都是它们在运行时才分配的类型,和它们在编译时的类型是不一样的。 如果拿不准要不要把某种方法声明为虚方法,那么就把它声明为虚方法好了。 在基类里把所有的方法都声明为虚方法会让最终的可执行 ......
三讲 方法

C++快速入门 第十九讲:覆盖方法和重载方法

覆盖是指派生类函数覆盖基类函数(函数名字参数相同且基类函数必须有virtual关键字) 以上学习可知可以通过创建新的子类来重用现有的代码(继承) 当我们需要在基类里提供一个通用的函数,但在它的某个子类里需要修改这个方法的实现,覆盖(overriding)就可以做到。 实例1:覆盖应用 1 //级别 ......
方法

C++快速入门 第二十二讲:静态属性和静态方法2

规则: 静态成员是所有对象共享的,所以不能在静态方法里访问非静态的元素。(因为每个对象都有自己的this指针,静态方法不是属于某个特定的对象,而是由全体对象共享的,静态成员存储地址与对象并不在一起) 非静态方法可以访问类的静态成员,也可以访问类的非静态成员。 this指针是类的一个自动生成、自动隐藏 ......
静态 属性 方法

C++快速入门 第二十讲:一种特殊的友情关系——友元关系

友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的public方法和属性,还允许友元访问对方的protected和private方法和属性。 实例1:友元关系访问保护量 1 #include <iostream> 2 #include <string> 3 4 using namesp ......
友情

C++快速入门 第十八讲:访问控制

访问控制:C++提供用来保护(保护意思是对谁可以调用某个方法和访问某一个属性加上一个限制)类里的方法和属性的手段 实例1:访问级别应用 1 //级别 允许谁来访问 2 //public 任何代码 3 //protected 这个类本身和它的子类 4 //private 只有这个类本身 5 #incl ......

C++快速入门 第十六讲:this指针和类的继承

this指针指的是指向当前类生成的对象 继承机制使得程序员可以创建一个类的堆叠层次结构,每个子类均将继承在它的基类定义的方法和属性。 简单地说,就是通过继承机制,可以对现有的代码进行进一步扩展,并应用到新的程序中。 基类可以派生出其它的类,也称为父类或超类(如动物类) 子类是从基类派生出来的类(如乌 ......
指针 this

C++快速入门 第十七讲:继承机制中的构造器和析构器

实例1:构造器及其参数的继承应用 1 #include <iostream> 2 #include <string> 3 4 class Animal//定义Animal类 5 { 6 public: 7 std::string mouth; 8 std::string name; 9 10 Ani ......
机制

C++快速入门 第十三讲:联合、枚举和类型别名

联合(union)与结构有很多相似之处,联合也可以容纳多种不同类型的值,但是它每次只能储存这些值中的一个(即当我们已经给联合里的一个成员赋值后,再给另一个成员赋值时,将丢弃第一个成员的值)。 实例1:联合的应用 1 #include <iostream> 2 3 union mima 4 { 5 u ......
三讲 别名 类型