
C/C++学习笔记
文章平均质量分 85
C/C++语言学习笔记
stdcoutzrh
MachineLearning/ComputerVision
展开
-
C++内存管理:拷贝构造函数、深拷贝与浅拷贝
C++学习笔记:拷贝构造函数、深拷贝与浅拷贝1.拷贝构造函数的引入1.1 用对象来初始化对象1.2 为什么可以1.3 什么是拷贝构造函数2.浅拷贝与深拷贝2.1 浅拷贝的缺陷2.2 如何解决这个问题1.拷贝构造函数的引入1.1 用对象来初始化对象简单变量定义时,可以直接初始化,也可以用另一个同类型变量来初始化。举个栗子://直接初始化,定义的时候直接给定一个初始值int a = 4; //间接初始化,用另一个同类型的变量来初始化int x=5;int y=x; 用class来定义对象原创 2021-01-25 10:28:57 · 745 阅读 · 0 评论 -
C++内存管理:内存管理基础、new和malloc、智能指针引入
C++内存管理:内存管理基础、new和malloc、智能指针引入1.为什么要研究内存管理1.1 程序就是数据加算法1.2 计算机中如何管理内存1.3 总结2.C++可用内存区域2.1 C语言可用内存区域2.2 C++新增内存区域2.3 总结3.new和malloc的区别3.1 简单区别3.2 深度区别3.3 总结4.智能指针引入4.1 指针的优势和劣势4.2 如何解决4.3 智能指针如何实现4.4 智能指针总结5.Java的垃圾回收机制5.1 Java语言整体框架5.2 Java的垃圾回收机制5.3 垃圾回原创 2021-02-09 16:51:59 · 592 阅读 · 1 评论 -
C++学习笔记:数据类型相关typeid、cast、自动类型推导
C++学习笔记:数据类型相关typeid、cast1.typeid2.C++中的4中cast2.1 静态转换static_cast2.2 重新解释转换reintepret_cast2.3 const_cast2.4 动态转换dynamic_cast3.C++的自动类型推导3.1 auto关键字3.2 decltype关键字3.3 auto和decltype的对比C++是强类型语言,里面的每一个变量和表达式都有自己的类型。有了类型编译器就可以帮助进行类型检查,有错误就会报出来。1.typeidtypei原创 2021-02-08 10:03:33 · 652 阅读 · 1 评论 -
C++面向对象:友元函数和友元类
C++学习笔记:友元函数和友元类1.友元函数1.1 外部函数访问类内成员1.2 友元函数的引入1.3 友元函数总结2.友元函数的另一种实现3.友元类3.1 友元类的概念和使用3.2 互为友元类3.3 友元类总结4.为什么会有友元函数4.1 使用友元函数的优缺点4.2 使用友元函数的两种情况4.3 运算符重载中使用友元回顾4.4 两个类如何共享数据4.5 友元函数和类的成员函数的区别4.6 共有友元函数1.友元函数1.1 外部函数访问类内成员class person{public: string原创 2021-01-31 11:26:47 · 480 阅读 · 0 评论 -
C++面向对象:静态成员和静态类
C++学习笔记:静态成员和静态类1.类的静态成员1.1 static关键字1.2 什么是静态成员1.3 静态成员的特征和实践验证2.静态成员的深度理解2.1静态数据成员的使用2.2 静态成员和普通成员的互相调用规则2.3 从内存角度来看静态成员3.静态成员的用途3.1 用途举例3.2 静态成员与面向对象4.静态类的概念4.1 什么是静态类4.2 静态类的优势4.3 C++不支持静态类1.类的静态成员1.1 static关键字static关键字在C语言中有2种用法:static修饰局部变量和全局变量,这原创 2021-01-29 19:49:46 · 8434 阅读 · 1 评论 -
C++面向对象的多态特性:多态和虚函数
C++学习笔记:多态和虚函数1.什么是多态2.虚函数3.多态中的override4.纯虚函数与抽象类4.1 纯虚函数4.2 抽象类(abstract type)4.3 接口(interface)5.虚析构函数5.1 什么是虚析构函数5.2 为什么需要虚析构函数1.什么是多态案例:父类animal,2个子类dog和cat,实现run()方法。class animal{public: void run(void) { cout<<"animal run()."<<e原创 2021-01-28 19:39:02 · 329 阅读 · 1 评论 -
C++学习笔记:运算符重载
C++学习笔记:运算符重载1.运算符重载引入1.1 从函数重载说起1.2 什么是运算符重载1.3 运算符重载示例2.深度理解运算符重载2.1 运算符重载的本质2.2 运算符重载的意义1.运算符重载引入1.1 从函数重载说起函数重载是在一定作用域内,多个相同名称但不同参数列表的函数重载。编译时由编译器根据实际调用时给的实参情况来判定本次实际用哪个函数,这个过程叫重载决策。重载函数本质上就是多个独立函数,重载机制在编译时发生,运行时不参与。函数重载的意义就是避免我们给函数胡乱起名,方便编写类库覆盖所有可原创 2021-01-29 12:44:58 · 443 阅读 · 0 评论 -
C++面向对象的继承特性:多继承二义性问题、虚继承
C++学习笔记:多继承及其二义性问题1.多继承2.多继承的二义性问题情况13.多继承的二义性问题情况24.多继承的二义性问题情况总结5.虚继承解决菱形继承的二义性问题5.1 虚继承怎么用5.2 虚继承的实现原理1.多继承多继承就是一个子类有多个父类。在继承中,子类会继承父类的成员变量和成员函数:class A {public: int a; void print(void){cout<<"a = "<<this->a<<endl;}};cl原创 2021-01-28 18:24:39 · 770 阅读 · 0 评论 -
C++面向对象的继承特性:父类和子类的类型兼容规则
C++学习笔记:子类和父类的类型兼容规则1.何为类型兼容规则2.类型兼容规则的常见情况3.总结1.何为类型兼容规则类型兼容规则是父类和子类在数据类型方面的兼容规则。C和C++都是强类型语言,任何变量和对象、指针、引用等都有它自己的类型,编译器根据类型来确定很多事的。除了类型要匹配,还需要兼容。比如int和short、char就是兼容的,它们对内存里二进制数据的解读方式是一样的,而int和float,尽管它们都是占4个字节,但是它们对于内存中二进制数据的解读方式是完全不一样的,所以它们完全不兼容。派生类原创 2021-01-26 20:15:19 · 827 阅读 · 0 评论 -
C++面向对象的继承特性:派生类和基类的同名成员问题
C++学习笔记:派生类和基类的同名成员问题1.派生类中再实现一个基类中的方法会怎样2.派生类中如何访问被隐藏的基类方法3.注意和总结1.派生类中再实现一个基类中的方法会怎样派生类和基类中各自实现一个内容不同但函数原型完全相同的方法会怎么样?代码实验:#include<iostream>using namespace std;class person{public: string name; int age; void info(void) { cout<&原创 2021-01-26 19:39:40 · 615 阅读 · 2 评论 -
C++面向对象的继承特性:派生类和基类的构造析构关系
C++学习笔记:派生类和基类的构造析构关系1.派生类和基类的构造析构关系2.为什么派生类的构造(析构)必须调用基类的某个构造(析构)3.其他几个细节1.派生类和基类的构造析构关系派生类并不继承基类的构造和析构函数,只继承成员变量和普通成员方法。不继承意思是派生类中确实不包含基类的构造和析构函数,派生类自己有自己的构造和析构,规则和之前讲过的完全一样。研究构造和析构函数时,一定要注意默认规则。派生类的构造函数一定会调用基类的某一个构造函数,析构也一样。派生类的任意构造函数可以显式指定调用基类的任意一个构原创 2021-01-26 16:04:49 · 2205 阅读 · 0 评论 -
C++面向对象的继承特性:继承特性和其中的权限管控
C++学习笔记:面向对象的继承特性1.什么是继承2.类的继承案例3.类继承中的权限管控3.1 C++类中的访问权限管控回顾3.2 类继承时的三种权限设置对派生类的影响4.继承体系下子类和父类的关系4.1 子类和父类本质上是2个独立的类4.2 站在子类角度看继承4.3 为什么父类private成员在子类中还有4.4 为什么父类private成员在子类中还有但不能直接访问1.什么是继承继承是C++源生支持的一种语法特性,是C++面向对象的一种支持表现。派生类会“继承”基类的成员变量和成员方法。继承特性可以让原创 2021-01-26 12:54:18 · 362 阅读 · 0 评论 -
C++面向对象的封装特性:常函数const和mutable
C++学习笔记:const和mutable1.const可以实现常函数2.C++为什么设计常函数3.mutable可以局部打破const常函数1.const可以实现常函数所谓的常函数,就是class的成员函数承诺在函数内部不会修改class的任何成员变量(注意是任何一个)。实现语法是在函数名后面加上const,举个栗子:#include<iostream>using namespace;class person{public: person(int Age):age(Ag原创 2021-01-26 10:20:38 · 233 阅读 · 0 评论 -
C++面向对象的封装特性:访问权限问题
C++学习笔记:访问权限问题1.访问权限基本用法1.1 public访问权限是全局的1.2 private访问权限1.3 更多关于访问权限问题的问题2.C++为什么要设计访问权限2.1 访问权限作用①:保护内部资源2.2 访问权限作用②:隐藏外部使用时无需关心的内部细节2.3 访问权限作用③:其实这就是面向对象的封装特性3.访问权限带来的一些新编程理念3.1 只读变量和只写变量3.2 为什么C语言不需要这些1.访问权限基本用法1.1 public访问权限是全局的①public的成员变量,在类的成员方法原创 2021-01-25 17:33:25 · 367 阅读 · 1 评论 -
C++面向对象的封装特性:构造函数和析构函数
C++学习笔记:构造函数和析构函数1.一个基础的C++面向对象编程2.构造函数和析构函数2.1 什么是构造函数2.2 构造函数和析构函数一般用法2.3 为什么需要构造函数和析构函数2.4 在构造和析构函数中使用动态内存1.一个基础的C++面向对象编程一般一个.cpp和一个.hpp文件配对来描述一个class,class的名字和文件名相同的。①在头文件person.hpp:中定义类:#ifndef __PERSON_HPP__#define __PERSON_HPP__#include<原创 2021-01-25 10:28:26 · 599 阅读 · 0 评论 -
C++面向对象:面向对象思想引入
C++学习笔记:面向对象1.从高处看面向对象2.模拟单片机流水灯2.1 用C语言常规方法实现2.2 用C语言面向对象方法实现2.3 用C++面向对象方式实现,对比第二步,再理解2.4 逐一详解面向对象的各特征,并且用C++来实例讲解实现1.从高处看面向对象面向对象是一种编程思想,它并不是C++特有的,所有编程语言(比如汇编,C等)都可以实现面向对象。面向对象语言就是设计语言特性时充分考虑并且原生支持面向对象特征的那些编程语言(例如Python,Java等),非面向对象语言没有原生支持面向对象,但是可以原创 2021-01-23 09:02:55 · 597 阅读 · 0 评论 -
C++中的引用剖析
C++学习笔记:引用1.引用介绍2.引用和指针的对比3.引用的本质剖析3.1 引用可以加const修饰3.2 引用和sizeof运算符3.3 引用的本质是const指针1.引用介绍在C语言中,对于下面两个实现交换变量值的函数,因为函数传参传的是函数值,swap1()是完成不了的,而swap2()可以。#include<stdio.h>void swap1(int a,int b){ int tmp=a; a=b; b=tmp;}void swap2(int* pa,int原创 2021-01-18 10:35:49 · 215 阅读 · 0 评论 -
C++命名空间:默认命名空间与匿名命名空间
3.C++默认命名空间(1)又叫全局命名空间(2)默认命名空间引用其他命名空间方法(3)默认命名空间引用自己的方法(4)其他命名空间引用默认命名空间中的方法::f();4.C++匿名命名空间1.3.4.1、std和cout的引入(1)std是C++标准库定义好的一个namespace(2)cout是std这个namespace下的一个标准输出工具,类似于C中的printf(3)用法示例1.3.4.2、匿名命名空间的定义和使用(1)定义(2)匿名命名空间中引用其他命名空间中的方法(3原创 2021-01-17 10:10:44 · 6868 阅读 · 6 评论 -
C++命名空间:命名空间基础
C++学习笔记:命名空间1. 何为命名空间1.1 什么是命名空间1.2 C语言是如何解决名称冲突的1.3 命名空间如何解决问题1.4 关于语言特性的思考2.namespace的初级定义和使用2.1 同一文件内定义namespace2.2 同一文件内使用namespace2.3 不同C文件间定义和使用namespace3.C++默认命名空间4.C++匿名命名空间5.嵌套命名空间1. 何为命名空间...原创 2020-04-09 07:55:16 · 757 阅读 · 1 评论