C++
文章平均质量分 57
C++
半只因
这个作者很懒,什么都没留下…
展开
-
C++ I/O流
1. 主要的I/O流类2. 格式化I/O2.1 格式化函数2.2 流控制符3. 字符串流istrstream 和 ostrstream 可能要过时了,提出了新的方法叫 istringstream 和 ostringstream4. 文件流后面最好加: ofs.close();后面最好加: ofs.close();...原创 2021-02-05 15:05:03 · 68 阅读 · 0 评论 -
C++ 异常机制
1. 传统的错误处理1.1 程序开发中常见的错误1.2 传统错误处理方式2. C++的异常机制2.1 正常流程2.2 异常流程#include <iostream>#include <cstdio>using namespace std;class A{public: A(void){ cout << "A类构造" << endl; } ~A(void){ cout <原创 2021-02-05 14:10:55 · 119 阅读 · 0 评论 -
C++ 多态场景下使用 typeid,dynamic_cast
1. typeid操作符1.1 typeid.name()#include <iostream>#include <typeinfo>using namespace std;int main(void){ int i; cout << typeid(int).name() << "," << typeid(i).name() << endl; int* a1[10]; int (*a2)[10];原创 2021-02-04 21:51:57 · 450 阅读 · 0 评论 -
C++ 多态
1. 函数的重写和多态的概念virtual 修饰基类成员函数, 子类中对应函数自动变虚。没有virtual, 就没有多态向上造型的产物:指向子类对象的基类类型指针,引用子类对象的基类类型引用。通过指向子类对象的基类类型指针调用虚函数时,它会根据该指针实际所指向的目标对象类型去调用(而跟指针类型没有关系)。2. 虚函数覆盖的条件特殊的是析构函数可以变虚#include <iostream>#include <cstring>using namespace原创 2021-02-04 19:39:24 · 170 阅读 · 0 评论 -
C++ 多重继承
1. 多重继承2. 名字冲突问题3. 钻石继承和虚继承原创 2021-02-03 23:11:24 · 167 阅读 · 1 评论 -
C++ 继承
1. 继承的概念子类可以继承基类, 基类去派生子类Human 是基类,Student和Teacher是子类2. 继承的语法#include <iostream>using namespace std;class Human {// 人类(基类)public: // 常引用才能引用右值 Human(const string& name, int age):m_name(name), m_age(age){}; void eat(const s原创 2021-02-02 17:17:04 · 221 阅读 · 0 评论 -
C++ 操作符重载
1. 双目操作符重载1.1 双目操作符1.2 运算类双目操作符 的 重载友元函数可以写在类的内部,但本质还是友元函数。#include <iostream>using namespace std;class Complex{public: Complex(int r, int i):m_r(r),m_i(i){} void print(void)const{ cout << m_r << "+" << m_原创 2021-02-01 22:09:29 · 174 阅读 · 0 评论 -
C++ 单例模式、饿汉和懒汉
1. 为什么需要单例模式2. 什么是单例模式3. 如何创建单例模式3.1 禁止类外部创建对象(私有化构造函数)单例模式中对象的唯一性是由对象的实现者保证的。通过私有化构造函数 和 拷贝构造函数(缺省的构造函数都是公有的)来禁止在类的外部创建对象。其中,拷贝构造函数声明就好,不需要写具体实现,它是有缺省实现的。声明它只是为了防止拷贝构造函数被调用,并不会真的去使用它。3.2 类自己维护其唯一对象(私有静态成员变量)因为如果不加 static, 编译器编译时是要确定类的大小的,类的大原创 2021-01-31 12:47:50 · 658 阅读 · 0 评论 -
C++ 静态成员
1. 静态成员的作用1.1 为什么要有静态成员静态成员:局限在类中使用的全局资源2. 静态成员变量2.1 语法普通成员变量的定义和初始化是在构造时完成的。而静态成员需要在类的外部单独进行定义和初始化。实例化出来的对象只有非静态的的成员变量, 没有静态的。静态成员变量是类中的全局资源,并不属于对象。但对象是可以使用类中的静态变量的,从而实现对象间的数据共享。静态变量和全局变量类似,被存放在全局区,可以把静态成员变量理解为限制在类中使用的全局变量。静态成员变量也要收到类的访问控制限定符原创 2021-01-29 15:44:35 · 156 阅读 · 0 评论 -
C++ 拷贝构造和拷贝赋值、简单String 类的实现
用编译器自动分配的缺省拷贝构造函数已经可以满足绝大部分的场景。今天主要讲编译器提供的缺省拷贝构造函数无法满足的场景。1. 深拷贝和浅拷贝1. 浅拷贝2. 拷贝赋值3. String 类的实现4. 忠告和建议...原创 2021-01-29 11:58:51 · 267 阅读 · 0 评论 -
C++ 析构函数、对象的创建和销毁过程
1. 什么是析构函数1.1 语法~在C中是按位取反的操作。析构函数是对象销毁时,自动被调用的,完成对象动态资源的清理操作。这里的动态资源指的是,只是通过对象里面的成员所维护的,不是对象本身的资源。需要手动销毁清理的。不能被重载,所以一个类只有一个析构函数。2. 析构函数的应用第二句中离开作用域的意思应该就是,离开了对象定义时所在的{ }。而不是对象所在函数结束时(即 return时)。#include <iostream>#include <unistd原创 2021-01-28 18:27:52 · 3677 阅读 · 0 评论 -
C++ 常成员函数、mutable关键字
1. 常函数(只针对普通成员函数)const属性只针对普通成员函数。构造,析构函数,以及C中的一些全局函数,都是没有const属性的一旦加上const属性,就不能在成员函数中修改成员变量。如果只希望某个成员函数只是访问成员变量,但不要修改,最好加上const属性。#include <iostream>using namespace std;class A{public: A(int data = 0):m_data(data){} // 编译后: void prin原创 2021-01-28 15:52:12 · 380 阅读 · 0 评论 -
C++ this指针
1. this指针的由来构造函数和析构函数中的this指针指向正在创建的对象普通成员函数中,this指向指向该函数的调用对象1.1 代码示例#include <iostream>using namespace std;class User{public: // 通过构造函数的参数,完成对成员变量的初始化操作。 // 而构造函数中的this指针指向正在创建的对象 User(const string& name, int age):m_name(n原创 2021-01-28 13:59:47 · 180 阅读 · 0 评论 -
C++ 构造函数的初始化表
1. 构造函数的初始化表1.1 语法形式1.2 代码示例#include <iostream>using namespace std;class Student {public: // 1. 先把成员变量定义出来,然后再初始化 // Student(const string& name, int age){ // m_name = name; // m_age = age; // } // 2. 定义成员变原创 2021-01-27 23:59:16 · 298 阅读 · 0 评论 -
C++ 构造函数的重载、缺省构造函数、类型转换构造函数、拷贝构造函数
1. 构造函数的重载2. 缺省构造函数只要对象被创建,就会调用构造函数#include <iostream>using namespace std;class A {public: A(void){ cout << "无参构造函数" << endl; m_i = 0; }private: int m_i;};class B {public: int m_j; // 基本类型原创 2021-01-27 18:57:28 · 943 阅读 · 0 评论 -
C++ 类、类实例化对象、多文件编程
1. 对象1.1 为什么要面向对象1.2 什么是面向对象2. 类从语法角度来说类是自定义的数据类型,类似之前所说的结构体,但比结构体要复杂。成员变量和成员函数表达对象的属性和行为。上图中左边是一群狗,编程时把他们共同的属性和行为提取出来就得到了类。然后再用类实例化出具体的对象,得到右边各种各样的狗。2.1 类的一般形式定义类 (原来叫定义结构体, 现在叫定义类) 一般都用class, 保留struct是为了兼容c中的结构体。2.2 代码示例#include <ios原创 2021-01-26 17:00:05 · 1335 阅读 · 0 评论 -
C++ 引用型函数参数、引用型返回值、引用和指针
1. 引用形函数参数原创 2021-01-25 20:31:52 · 1969 阅读 · 1 评论 -
C++ 引用、常引用、左值和右值
1. 引用#include <iostream>using namespace std;int main(void){ int a = 100; // 定义引用时必须初始化,。 &是引用的标记,不是取地址 // a的引用b和a的变量类型要一致 int& b = a; // a的引用b和a的执行存储区的地址是一样的 cout << "&a = " << &a << endl原创 2021-01-24 22:25:09 · 224 阅读 · 0 评论 -
C++ 哑元, 内联函数,动态内存管理
哑元只有类型而没有变量名的参数称为“哑元”void func(int /*哑元*/){}需要使用哑元的场景兼容旧代码, 保证函数的向下兼容void func(int i, int j){} /*==升级==*/ void func(int i){...}void func(int i, int j){} /*==升级==*/ void func(int i, int/*哑元*/){...}操作符重载中, 区分 前后++,前后- -内联函数...原创 2021-01-24 21:03:51 · 208 阅读 · 0 评论 -
C++ 缺省参数
缺省参数可以为函数的全部参数或者部分参数指定缺省值(默认实参), 调用该函数时如果为指定实参, 就取缺省值作为相应实参;void func(int 1 = 10, int j =20){...}靠右原则, 如果函数的某个参数具有缺省值, 那么该参数右侧的所有参数都必须带有缺省void func(int i = 0, int j){...} //errovoid func(int i, int j = 0){...} //true如果函数和声明分开, 缺省参数要写在函数的声明位置,原创 2020-11-10 20:33:50 · 649 阅读 · 0 评论 -
C++ 函数重载
函数重载概念同一作用域, 函数名相同, 不同的参数类型, 将构成重载关系 void func(void){...} void func(int i){...} void func(int i, double d){...}函数重载与函数返回值无关, 与形参变量名也无关(编译器编译函数时不看形参变量名)void func(int i){...}char* func(int i){...} //函数名相同, 但形参类型一样, 不构成重载关系void func(int j){...}原创 2020-11-10 19:30:31 · 333 阅读 · 0 评论 -
C++ 类型转换
类型转换隐式类型转换不同类型数据之间的运算int i = 'C';函数调用时, 不同类型实参到形参的传值void func(int i){ ...}func('C');函数定义时, return不同类型的数据int func(void) { return 'C'; //需要先把'C'转换成整型数才能完成返回值的带回}强制类型转换C风格的强制转换(目标类型)源类型变量C++ 风格的强制类型转换目标类型(源类型变量)强制转换的优缺点优点原创 2020-11-03 20:57:34 · 97 阅读 · 0 评论 -
C++ 布尔类型
布尔类型(bool)C++ 中布尔(bool)是基本数据类型, 专门表示逻辑值布尔类型的字面值常量true 表示逻辑真 (true就是字面值1)false便是逻辑假 (false就是字面值0)布尔类型的本质单字节的整数, 使用1表示真, 0 表示假它可以接收任何表达式的结果, 但并不会保存表达式的算数值, 仅保存表达式的逻辑值任何基本类型都可以被隐式转换为布尔类型非零即真, 零(NULL) 为假#include <iostream>using name原创 2020-11-02 15:18:02 · 5105 阅读 · 0 评论 -
C++ 字符串
C++兼容C中的字符串C语言中表示字符串的方式字面值常量 “hello” (常量: 一般字符串是不可以修改的)字符指针 char* (记录字符串的起始地址, 因为字符串的内存都是连续的,以 /0 结束)字符数组 char[] (最会要以 /0 结束)常用的函数字符串拷贝: strcpy()字符串连接: strcat()字符串比较: strcmp()C++的string 类型C++标准库中提供了string类型专门表示字符串使用string可以更方便和安全的管理字符串原创 2020-11-02 14:20:16 · 59 阅读 · 0 评论 -
C++ 结构体, 联合体, 枚举
结构体c++中定义结构型变量, 可以省略struct关键字(C中经常会通过typedef定义一个类型别名 然后再去使用它定义变量, 以达到简化代码的目的)struct XX{....};XX x;//定义结构体类型变量直接省略structc++结构体中可以直接定义函数,谓之成员函数(方法)在成员函数中可以直接访问该结构体的成员变量,无需"." 或 "->"#include <iostream>using namespace std;struct Student{原创 2020-10-21 00:57:59 · 157 阅读 · 0 评论 -
C++ 名字空间
名字空间1. 什么是名字空间名字空间也称为命名空间, 表示一个作用域定义在名字空间的实体称为名字空间成员名字空间作用避免名字冲突划分逻辑单元2. 名字空间定义使用namespace关键字定义名字空间名字空间成员可以是全局变量, 函数, 类型, 名字空间()namespace 名字空间命名 { int g_num = 0; //全局变量 void func(...) {...}; //函数 struct Student {...}; //结构体类型原创 2020-10-19 22:11:18 · 113 阅读 · 0 评论 -
C ++ 备忘
1 . cout设置输出数据(不以科学计数法输出)原创 2020-06-19 16:52:01 · 98 阅读 · 0 评论 -
C++ 计算程序的运行时间
#include <chrono>int main(){auto start = std::chrono::steady_clock::now();////需要被计算运行时间的程序//auto end = std::chrono::steady_clock::now();std::chrono::duration<double, std::milli> el...原创 2019-07-24 11:39:51 · 757 阅读 · 0 评论 -
C++ 拼接图片(apollo框架下)
C++ , image_combine.cc#include <iostream>#include <opencv2/opencv.hpp>int main(int argc,char **argv){ cv::Mat combine,combine1,combine2; cv::Mat a=cv::imread(argv[1]); cv::Mat b=cv:...原创 2019-07-19 10:52:23 · 698 阅读 · 0 评论