随笔分类 - C++
摘要:一.虚函数,覆盖,多态 1.成员函数在定义时添加了virtual关键字,这种函数叫做虚函数 覆盖:如果在子类中实现了与父类中的虚函数具有相同的函数签名的函数,那么子类当中的成员函数会覆盖父类中的成员函数。 多态:如果子类中的成员函数对父类中的成员函数进行了覆盖,当一个指向子类的父类指针或者引用了子类
阅读全文
摘要:一.类与类之间的关系 1.类与类之间可能存在共性。 2.类与类之间必定会有差异。 3.为了节约开发时间和代码量,我们在设计类时可以把类的共享对象抽出来形成一个基础类(基类) 4.使用基类+差异 = 派生类 二.继承的语法 1.在设计一个类时如果已有的类中有它需要的成员,它可以从已有的类中继承哪些成员
阅读全文
摘要:一、操作符函数 在C++中,编译器有能力把一个由数据、对象和操作符共同组成的表达式,解释为对一个全局或成员函数的调用。 该全局或成员函数被称为操作符函数,通过重定义操作符函数,可以实现针对自定义类型的运算法则,并使之与内置类型一样参与各种表达式。 二、双目操作符表达式 成员函数 形如L#R双目操作符
阅读全文
摘要:一、什么是STL STL是standart template library,标准模板库。 是HP实验室开发的一系列软件的统称,从根本上来说,它是一些容器和算法的集合,它是世界上很多最聪明的程序员多年的杰作。 STL是标准化的组件,不用重新开发,可以直接使用,它是C++的一部分,不需要额外安装。 二
阅读全文
摘要:一、如何进行泛型编程 C/C++是一种静态编程语言,必须需要把代码翻译成可执行的二进制可执行程序然后再运行,一旦编译好之后就不能再变了(数据类型也就必须确定下无法更改,因此要为每一种数据类型编写一份算法,工程量巨大)。 C语言中的快速排序: 1 void qsort(void *base, size
阅读全文
摘要:在学习对运算符的重载的时候,重载了++,--(前缀后缀),并且都是在定义为类中的成员函数。但是当我尝试去重载>>,<<为某一个类的成员函数的时候,就会报错,无论如何改参数的属性,位置,都不行,只有将<<,>>重载定义在全局,并且在这个类中将其声明为友元时,才能完成重载。 根据我们实践出真知的道理,我
阅读全文
摘要:C和C++的区别 C语言语法简单,但使用不易 C++语法非常庞大复杂,但使用方便,更注重的是它的编程思想(面向对象)。 一.第一个C++程序 1.文件扩展名 C++源文件扩展名 .cpp,C,cxx,c(需要指定编译语言) C++自定义的头文件依然保留.h 2.头文件 C++标准库的头文件,不带.h,最常用的是iostream, C语言的东西依然可以继续使用 ,比如stdi...
阅读全文
摘要:一.名字空间 C语言中的名字空间:全局,局部,块 C++认为:全局空间用起来非常方便,但是如果把太多的东西放在全局空间中,会造成命名冲突,所以C++引用了这样一种机制,把全局空间在进行划分 名字空间:把全局的命名空间进一步分割。可以创建出一个个独立的命名空间,防止相互之间冲突。 1.定义名字空间: namespace name { 变量; 函数; 结构,类; }...
阅读全文
摘要:C++发家史: 最初导致C++诞生的原因是在Bjarne博士等人试图去分析UNIX的内核的时候,这项工作开始于1979年4月,当时由于没有合适的工具能够有效的分析由于内核分布而造成的网络流量,以及怎样将内核模块化。同年10月,Bjarne博士完成了一个可以运行的预处理程序,称之为Cpre,它为C加上
阅读全文
摘要:1.分配再静态或栈内存中的对象由编译器自动创建销毁。2.C++中动态内存的管理是通过new:前者为对象非配空间并返回一个指向该对象的指针。delete:接受一个动态对象的指针,摧毁该对象,并释放与之关联的内存。智能指针:负责自动释放所指对象,都定义在memory头文件中shared_ptr:允许多个指针指向同一个对象unique_ptr:独占所指对象。weak_ptr:弱引用,指向shared_p...
阅读全文
摘要:1.关联容器:map关键字-值对,经常被称为关联数组set中每个元素只有一个关键字,即只保存关键字的容器①允许重复的关键字的容器名字都包含multi。②不保持关键字顺序存储的容器的名字都以但粗unordered开头。③无序容器以哈希函数来组织元素。④关联容器的迭代器都是双向的。map set multimap multiset / 无序集合 unordered_map ...
阅读全文
摘要:关键:算法通过在迭代器上进行操作来实现类型无关。算法不改变所操作序列的大小。1.算法大多都定义在algorithm头文件中,标准库还在头文件numeric中定义了一组数值泛型算法。2.泛型算法永远也不会改变底层容器的大小。3.用一个单一迭代器表示第二个程序的算法都假定第二个序列至少与第一个一样长。4.插入迭代器:当我们通过一个插入迭代器赋值时,一个与赋值号右侧值相等的元素被添加到容器中。5.多个算...
阅读全文
摘要:PS:删除元素的成员函数并不检查其参数。在删除元素之前,程序员必须确保它们是存在的。1.迭代器的范围是[begin,end)左闭右开。2.对构成迭代器的要求:①它们指向同一个容器中的元素或者容器的最后一个元素之后的位置。②end不在begin之前。3.当将一个容器初始化为另一个容器的拷贝的时候,两个容器的容器类型和元素类型都必须相同。但是,当传递迭代器参数来拷贝一个范围的时候,新容器和原容器中的元...
阅读全文
摘要:1.IO对象不能拷贝或对IO对象赋值,进行IO操作的函数通常是以引用方式传递和返回流。2.一个流一旦发生错误,其上的后续的IO操作都会失败。代码通常应该在使用一个流之前检查它是否处于良好状态。确定一个流对象的状态的最简单的方法就是将它当作一个条件来使用。(while,for循环条件)3.iostate类型:badbit,failbit,eofbit,goodbit查询这四个标志位的函数:①good...
阅读全文
摘要:类(关键词):数据抽象(数据成员和函数成员),封装(private),构造函数,静态成员1.判断一个类是否是抽象数据类型,可以看我们对这个类的操作是对你内的数据成员操作,自己编写相应的处理函数,还是直接通过它的接口来使用这个类,完全不用知道这个类内具体有什么数据成员。2.当我们设计类的接口的时候,应该考虑如何才能使得类易于使用,而当我们使用类时,不应该顾及类的实现机理。3.任何对类成员的直接访问都...
阅读全文
摘要:1.重载函数,也就是说一个名字可以对应几个不同的函数。2.内置类型的未初始化局部变量将产生未定义的值。3.局部静态对象在程序执行路径第一次进过对象定义语句时初始化,并且直到程序终止才被销毁。内置类型的局部静态变量初始化为0.4.函数的声明也称函数原型。5.含有函数声明的头文件应该被包含到定义函数的源文件中。(来让编译器验证函数的定义和声明是否匹配)6.熟悉C语言的程序员常常使用指针类型的形参访问函...
阅读全文
摘要:1.指用是一个只含有一个单独的分号的语句。什么时候用到:语法上需要一条语句但是逻辑上不需要。2.复合语句是指用花括号括起来的语句和声明的序列,又被称为块。3.悬垂else :规定else与离它最近的尚未匹配的if匹配。4.case语句分支最后的break一般不要省略。如果没写break语句,最好加一段注释说明清楚程序的逻辑。5.在switch下的case条件语句定义一个default是很有必要的,...
阅读全文
摘要:1.using用法:using namespace ::name;注意事项:一般不在头文件使用using否则很容易导致运用命名空间不对错误。2.string的方法:①getline(输入流,string对象);注意一点是,函数从给定流读入内容,直到遇到换行符结束,(换行符也被读进来了),然后把所读的内容存入那个string对象中去(注意不存换行符)②size,size函数的返回值是string::...
阅读全文
摘要:数据类型选择的准则:①当明确知晓数值不可能为负时,选用无符号类型。②使用int执行整数运算。在实际应用中,short常常显得太小而long一般和int有一样的尺寸。如果运算范围超过int的表示范围,则选用long long。③在算术表达式中不要使用char或bool,只有在存放字符或布尔值时才使用它。因为类型char在一些机器上是有符号的,而在一些机器上又是无符号的,所以使用char进行算术运算特...
阅读全文
摘要:1.重载运算符:为已经存在的运算符赋予另外一层含义。2.左值与右值: ①当一个对象被用作右值的时候,用的是对象的值(内容);当一个对象被用作左值的时候,用的是对象的身份(在内存中的位置)。②在需要用的右值的地方可以用左值替代,但是不能把右值当成左值使用。3.在C++中一般的表达式说明符运算对象的求值顺序都没有明确规定,是随机的,因此在这些表达式中的对象来说,如果表达式指向并修改了同一个对象,会引...
阅读全文

浙公网安备 33010602011771号