C++
longbatianxia1
计算机视觉研究
展开
-
C++学习笔记38:算法简介
1 算法就是一个个函数模板,大多数在中定义2 STL中提供能在各种容器中通用的算法,比如查找,排序等3 算法通过迭代器来操纵容器中的元素。许多算法可以对容器中的一个局部区间进行操作,因此需要两个参数,一个是起始元素的迭代器, 一个时终止元素的后面一个元素的迭代器。比如查找和排序4 有的算法返回一个迭代器。比如find()算法,在容器中找一个元素,并返回一个指向该元素的迭代器5 算法可以处理...原创 2020-02-09 17:42:24 · 259 阅读 · 0 评论 -
C++学习笔记37:迭代器
1 基本用法 -- 用于指向顺序容器和关联容器中的元素 -- 迭代器用法和指针类似 -- 有const和非const两种 -- 通过迭代器可以读取它指向的元素 -- 通过非const迭代器还能修改其指向的元素 -- 容器类:从容器模板定义出来的就叫容器类2 定义一个容器类的迭代器的方法: -- 容器类名::iterator 变量名; ...原创 2020-02-09 17:36:23 · 163 阅读 · 0 评论 -
C++学习笔记36:标准模板库STL
泛型程序设计1 C++语言的核心优势之一就是便于软件重用2 C++中有两个方面体现重用: 1 面向对象的思想:继承和多态, 标准类库 2 泛型程序设计的思想:模板机制,以及标准模板库STL3 简单的说就是使用模板的程序设计法。4 将一些常用的数据结构(比如链表, 数组, 二叉树 写成类模板)和算法(比如排序,查找 写成函数模板)写成模板,以后则不论数据结构...原创 2020-02-09 17:14:21 · 262 阅读 · 0 评论 -
C++学习笔记35:String类
1 基本知识 -- string类是模板类 typedef basic_string<char> string; -- 使用string类要包含头文件<string> -- string对象的初始化 - string s1("Hello"); - string month = "March"; ...原创 2020-02-09 17:04:21 · 178 阅读 · 0 评论 -
C++学习笔记34:类模板与派生、友元、静态成员变量
1 类模板与继承 -- 类模板从类模板派生(mubanpaisheng1.cpp)/** * 类模板从类模板派生 */#include <iostream>using namespace std;template <class T1, class T2>class A{ T1 v1; T2 v2;};templ...原创 2020-02-09 16:57:44 · 235 阅读 · 0 评论 -
C++学习笔记33:类模板
1 问题的提出 -- 为了多快好省地定义出一批相似的类,可以定义类模板,然后由类模板生成不同的类 -- 数组是一种常见的数据类型,元素可以是: - 整数 - 学生 - 字符串 - ...... -- 考虑一个数组类,需要提供的基本操作 - len():查看数组的长度 - getE...原创 2020-02-09 16:42:57 · 185 阅读 · 0 评论 -
C++学习笔记32:函数模板
1 泛型程序设计:使用模板的程序设计2 考虑问题:能否只写一个Swap就能交换各种类型的变量? 交换两个整形变量的值的Swap函数 void Swap(int& x, int& y) { int tmp = x; x = y; y = tmp; } 交换两个double型变量的值的Swap函数 void Swap(d...原创 2020-02-09 16:32:23 · 182 阅读 · 0 评论 -
C++学习笔记31:文件读写(二)
1 二进制文件读写 -- 二进制读文件 ifstream和fstream的成员函数 函数:istream& read(char* s, long n); 作用:将文件读指针指向的地方的n个字节内容,读入到内存地址s,然后将文件读指针向后移动n个字节(以ios::in方式打开文件时,文件读指针开始指向文件开头,以ios::ate方式打开...原创 2020-02-08 16:47:40 · 266 阅读 · 0 评论 -
C++学习笔记30:文件读写(一)
1 文件和流 -- 可以将顺序文件看做一个有限字符构成的顺序字符流,然后像对cin, cout一样的读写 -- ios --> istream --> ifstream:从文件中读取数据的流 -- ios --> ostream --> ofstream:向文件中写入数据的流 -- fstream:既可以读一个文件,也可以写一个文件2 创...原创 2020-02-08 16:40:24 · 227 阅读 · 0 评论 -
C++学习笔记29:流操纵算子
1 整数流的基数:流操纵算子 dec, oct, hex, setbase(指定任何进制输出)2 浮点数的精度(precision, setprecision)3 设置域宽(setw, width):例如想要输出一个整数时,要输出10个字符那么宽,实际上它没有10个字符那么宽,不足的部分我可以补空格或者补04 用户自定义的流操纵算子5 使用流操纵算子,需要 #include iom...原创 2020-02-08 16:34:40 · 874 阅读 · 0 评论 -
C++学习笔记28:输入与输出
1 与输入输出相关的类 (1) --> ifstream --> istream ios --> iostream --> fstream --> ostream: -->...原创 2020-02-08 16:28:53 · 147 阅读 · 0 评论 -
C++学习笔记27:虚析构函数、纯虚函数、抽象类
虚析构函数 1 问题:通过基类的指针删除派生类对象时,通常情况下只调用基类的析构函数 -- 但是,删除一个派生类的对象时,应该先调用派生类的析构函数,然后调用基类的析构函数 2 解决办法:把基类的析构函数声明为virtual -- 派生类的析构函数可以virtual不进行声明 -- 通过基类的指针删除派生类对象时,首先调用派生类的析构...原创 2020-02-05 12:01:12 · 263 阅读 · 0 评论 -
C++学习笔记26:多态的实现原理
思考: “多态”的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的是基类还是派生类的函数,运行时才确定---这叫“动态联编”。“动态联编”如何实现呢?实例(见duotaiyuanli.cpp)//// Created by z on 19-10-16.//#include <iostream>using namespace std;clas...原创 2020-02-05 11:56:24 · 108 阅读 · 0 评论 -
C++学习笔记25:多态案例
例子:几何形体处理程序 需求:输入若干个几何形体的参数,要求按面积排序输出。输出时要指明形状。 input: 第一行是几何形体数目n(不超过100).下面有n行,每行以一个字母c开头 若c是‘R’,代表是一个矩形,本行后面跟着两个整数,分别是矩形的宽和高; 若c是‘C’,代表是一个圆,本行后面跟着一个整数代表其半径; ...原创 2020-02-05 11:50:54 · 624 阅读 · 0 评论 -
C++学习笔记24:多态案例之魔法门英雄无敌
需求分析: 游戏:魔法门之英雄无敌 游戏中有很多种怪物,每种怪物都有一个类与之对应,每个怪物就是一个对象 类: CSoldier CDragon CPhonex CAngel 怪物能够互相攻击,攻击敌人和被攻击时都有相应的动作,动作是通过对象的成员函数实现。 问题:游戏升级时,需要添加新的怪物--雷鸟,如何编程才能使得升级的时候代码改动和增加量较小 ...原创 2020-02-04 22:45:13 · 1344 阅读 · 0 评论 -
C++学习笔记23:虚函数和多态
虚函数 1 虚函数定义:在类的定义中,前面有virtual关键字的成员函数就是虚函数。 class base { virtual int get(); }; 2 int base::get(){} --virtual关键字只用在类定义里的函数声明中,写函数体时不用。 --构造函数...原创 2020-02-04 22:32:55 · 156 阅读 · 0 评论 -
C++学习笔记22:public继承的赋值兼容规则
1 派生类于基类赋值兼容规则 class base{}; class derived:public base{}; base b; derived d; (1)派生类的对象可以赋值给基类对象 b = d; // 原因:d中包含base对象,实际上就是把d中所包含的base对象的内容拷贝到b中。 (2)派生类对象可以初始化基类引...原创 2020-02-04 17:30:58 · 346 阅读 · 0 评论 -
C++学习笔记21:派生类的构造函数
1 例子(见本工程paishengleiconstructor.cpp)//// 派生类构造函数//#include <iostream>using namespace std;class Bug // 虫子类{private: int nLegs; // 腿数目 int nColor; // 颜色public: int nType;...原创 2020-02-04 17:26:02 · 301 阅读 · 0 评论 -
C++学习笔记20:派生类覆盖基类成员、类的保护成员
派生类覆盖基类成员1 覆盖定义: 派生类可以定义一个和基类成员同名的成员,这叫覆盖。 在派生类中访问这类成员时,缺省的情况时访问派生类中定义的成员。 要在派生类中访问由基类定义的同名成员时,要使用作用域符号::。2 例子(见本工程paishengfugai.cpp)//// 基类和派生类有同名成员的情况// 强调:不要在派生类和基类中写同名的成员变量#incl...原创 2020-02-04 17:13:34 · 1088 阅读 · 0 评论 -
C++学习笔记19:继承关系和复合关系
1 继承:“是”关系。 -- 基类A, B是基类A的派生类。 -- 逻辑上要求:‘一个B对象也是一个A对象’2 复合:“有”关系。 -- 类C中“有”成员变量k,k是类D的对象,则C和D是复合关系 -- 一般逻辑上要求:“D对象是C对象的固有属性或者组成部分”3 继承关系的使用 Human为基类,Man类和Woman类为其子类。4 复合关系的使用...原创 2020-02-04 17:06:55 · 505 阅读 · 0 评论 -
C++学习笔记18:继承和派生
1 继承定义 在定义一个新的类B时,如果该类与某个已有的类A相似(指的是B拥有A的全部特点),那么就吧A作为一个基类,而把B作为基类的一个派生类(也称子类)。2 派生类 (1)通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量和成员函数。 (2)派生类一经定义,可以独立使用,不依赖于基类。 (3)派生类拥有基类的全部成员函数和成员变量,不论是privat...原创 2020-02-04 17:03:40 · 217 阅读 · 0 评论 -
C++学习笔记17:自增自减运算符的重载
1 自增运算符++ 自减运算符-- 有前置/后置之分,为了区分所重载的是前置运算符还是后置运算符,C++规定: 前置运算符作为一元运算符重载 重载为成员函数: T& operator++(); T& operator--(); 重载为全局函数: T1& operator++(T2); T1& operato...原创 2020-02-04 10:01:51 · 649 阅读 · 0 评论 -
C++学习笔记16:类型转换运算符的重载
1 eg(见本工程leixingchongzai.cpp)//// 重载类型转换运算符案例//#include <iostream>using namespace std;class Complex{ double real, imag;public: Complex(double r = 0, double i = 0):real(r),imag(...原创 2020-02-04 09:52:41 · 285 阅读 · 0 评论 -
C++学习笔记15:流插入运算符和流提取运算符的重载
流插入运算符的重载问题 问题1:cout << 5 << "this"; 为什么该语句可以成立? 问题2:cout是什么? “<<”为什么能用在cout上?解答 cout是在iostream中定义的,ostream类的对象 “<<”能够用在cout上面,因为在iostr...原创 2020-02-04 09:49:26 · 591 阅读 · 0 评论 -
C++学习笔记14:运算符重载实例之可变长整形数组
1 kebianarr.cpp/** * 运算符重载实例:可变长整型数组 * * 分析: * CArray的对象代表一个数组,需要存放一个数组,那么数组存放在哪?需要使用动态分配的内存来存放数组元素,需要一个对象中有一个指针成员变量指向它。 * 动态分配内存也需要释放,因此在CArray类的析构函数中进行释放操作 * * 赋值语句中赋值号‘=’需要重载 * * a2是个...原创 2020-02-03 18:11:02 · 661 阅读 · 0 评论 -
C++学习笔记13:运算符重载为友元函数
1 eg(见本工程chongzaifriend.cpp)//// 运算符重载为友元函数//#include <iostream>using namespace std;class Complex{ double real, imag;public: Complex(double r, double i):real(r), imag(i){}; ...原创 2020-02-03 17:14:23 · 405 阅读 · 0 评论 -
C++学习笔记12:赋值运算符‘=’的重载
1 目的:希望赋值运算符两边的类型可以不匹配 eg:将int类型变量赋值给一个Complex对象;或者吧一个char*类型的字符串赋值给一个字符串对象。2 赋值运算符‘=’只能重载为成员函数3 eg:(见本工程fuzhichongzai.cpp)/** * 赋值运算符‘=’重载例子 * */#include <iostream>#include <cstr...原创 2020-02-03 17:05:29 · 367 阅读 · 0 评论 -
C++学习笔记11:运算符重载的基本概念
1 C++预定义的运算符,只能用于基本数据类型的运算:整形、实型、字符型、逻辑型2 数学上,两个复数可以直接进行+ - 运算。但C++中,直接将+ -运用于复数对象不允许。3 目的:为了让对象也通过运算符进行运算。eg: complex_a和complex_b是两个复数对象:求两个复数的和,希望能直接写 complex_a + complex_b4...原创 2020-02-03 10:27:32 · 204 阅读 · 0 评论 -
C++学习笔记10:友元
1 友元函数 (1)友元函数:一个类的友元函数可以访问该类的私有成员。 (2)eg:(见friends.cpp)// 友元函数例子// 友元函数:一个类的友元函数可以访问该类的私有成员#include <iostream>using namespace std;class CCar; // 提前声明CCar类,以便后面的CDriver类使用clas...原创 2020-02-02 14:43:26 · 152 阅读 · 0 评论 -
C++学习笔记9:常量对象、常量成员函数、常引用
常量对象 1 目的:如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加上const关键字 2 eg: class Demo{ private: int value; public: void SetValue(){} }; ...原创 2020-02-02 14:37:20 · 380 阅读 · 0 评论 -
C++学习笔记8:成员对象与封闭类
1 定义:有成员对象的类叫封闭类。2 例子:(见本工程closeclass.cpp)//// 封闭类例子//#include <iostream>using namespace std;class CTyre // 轮胎类{private: int radius; // 半径 int width; // 宽度public: // 初始...原创 2020-02-02 14:27:15 · 327 阅读 · 0 评论 -
C++学习笔记7:静态成员
1 静态成员:在定义前面添加了static关键字的成员。2 eg: static int i; // 静态成员变量 static void init(){} // 静态成员函数3 普通成员变量与静态成员变量的差别 (1)普通成员变量每个对象有各自的一份,而静态成员变量一共就有一份,为所有对象共享。 (2)sizeof运算符不会计算静态成员变量。 ...原创 2020-02-02 14:20:14 · 138 阅读 · 0 评论 -
C++学习笔记6:this指针
1 c++程序到c程序的翻译//// 演示C++程序到C程序翻译//class CCar{public: int price; void SetPrice(int p);};void CCar::SetPrice(int p) { price = p;}int main(){ CCar car; car.SetPrice(20000)...原创 2020-02-02 14:09:56 · 114 阅读 · 0 评论 -
C++学习笔记5:构造函数与析构函数
构造函数定义:名字与类名相同,可以有参数,不能有返回值(void也不行)作用:对对象进行初始化,如给成员变量进行赋初值性质: (1)如果定义类时没有写构造函数,编译器会生成一个默认的无参数的构造函数,该函数不做任何操作 (2)如果定义了构造函数,则编译器不会生成默认无参数的构造函数 (3)对象生成时构造函数自动被调用,对象一旦生成,再也不能执行构造函数 ...原创 2020-02-01 14:33:05 · 255 阅读 · 0 评论 -
C++学习笔记4:内联函数 函数重载 函数缺省参数
1 内联函数 目的:减少函数调用的开销 方法:将整个函数的代码插入到调用语句处,不会产生调用函数语句。 定义:在函数定义前面加inline关键字 eg: inline int Max(int a, int b) { if(a>b) return a; ...原创 2020-02-01 13:17:02 · 230 阅读 · 0 评论 -
C++学习笔记三:动态内存分配
1 用new运算符实现动态内存分配 (1)第一种用法,分配一个变量 eg: P = new T; 解释:T是任意类型名,P为类型为T*的指针。该语句动态分配一片大小为sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P eg: int* pn; pn = new int; *pn = 5; (2...原创 2020-02-01 13:13:26 · 145 阅读 · 0 评论 -
C++学习笔记二:const关键字用法
1 定义常量(define也是用来定义常量)2 定义常量指针不可通过常量指针修改其指向的内容,常量指针的指向可以发生变化。不能吧常量指针赋值给非常量指针,反过来可以。(除非采用强制转换)函数参数为常量指针时, 可避免函数内部不小心改变参数指针所指地方的内容。3 定义常引用...原创 2020-02-01 13:07:16 · 150 阅读 · 0 评论 -
C++学习笔记一:引用
1、引用写法类型名& 引用名 = 某变量名;’2、egint n = 4;int& r = n; // r引用了n,r的类型是 int&3、某个变量的引用,等价于这个变量,相当于这个变量的别名。4、 使用引用需要注意点(3条)(1)定义引用时候一定要将其初始化成引用某个变量(2)初始化后,它就一直引用这个变量,不会再引用其他变量。(3)引用只能引用变量,不...原创 2020-01-31 18:20:03 · 190 阅读 · 0 评论