[C++]22种设计模式的C++实现 C++设计模式前言1. 代码仓库https://github.com/TOMO-CAT/CppDesignPattern2. 前置知识UML类图与面向对象编程软件设计原则与SOLID原则创建型模式工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)生成器模式(Builder)原型模式(Prototype)单例模式(Singl...
[Skill]GitBook搭建 GitbookLinux centos7.2安装方式1. 安装node.js从官网拿到文件的下载链接:英文网址:https://nodejs.org/en/download/中文网址:http://nodejs.cn/download/wget https://npm.taobao.org/mirrors/node/v10.16.3/node-v10.16.3-linux-x64....
[C++面试]多态 概念多态在代码中指的就是“一个接口,多种实现”(相同的调用方法有不同的实现方式),属于面向对象编程的核心概念。广义的多态包括静态多态和动态多态,其中静态多态指的是编译时就可以确认使用的接口,动态多态指的是运行时才能确定具体引用的接口。静态多态和动态多态本质上的区别在于什么时候(编译期间or运行期间)将函数实现与函数调用关联起来。静态多态在编译期间就可以确定函数的调用地址并产生对应代码,动态多...
[C++面试]拷贝初始化与直接初始化 总结初始化值的是创建变量时赋予变量一个值(不同于赋值的概念)使用等号=初始化对象时是拷贝初始化,否则是直接初始化直接初始化也可能调用拷贝构造函数,拷贝初始化可以不调用拷贝构造函数初始化概念对象是类的实例化,在内存中会占据一个一定大小的空间。创建一个对象分为两步:分配内存空间和初始化,刚刚分配的空间有可能包含脏数据,因此我们需要通过初始化函数(C++中指的是构造函数)对分配的空间进行正...
[C++面试]宏相关问题 1. 宏常量与宏函数C++中用#define <宏名> <字符串>命令定义宏,在代码中将字符串替换宏名出现的位置。定义宏的方式根据是否包含参数可以分为两种:#define <宏名> <字符串>#define PI 3.1415926#define <宏名>(<参数列表>) <宏体>#define A(x...
[C++面试]C与C++(面向过程与面向对象)区别 综述C是一门结构化语言,重点在于数据结构与算法,侧重于对于输入进行运算得到输出(面向过程)。而C++考虑的是构造一个对象模型,通过获取对象的方法和属性来得到输出(面向对象)。面向对象与面向程序1. 区别面向对象:将问题拆解成多个步骤,通过一个一个步骤调用解决问题面向对象:将问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个问题中的行为2. 例子以五...
C++函数参数传递 引用传递和值传递1. 值传递当形参是非引用类型时,实参的值会被拷贝给形参,实参和形参是两个完全不同的对象,函数对形参做的所有操作都不会影响实参。Tips:当形参是指针类型时,形参和实参也是两个完全不同的指针,只不过他们指向同个对象。因为指针使我们可以间接地访问它所指向的对象,因此通过指针可以修改它所指对象的值。熟悉C语言的程序员常常使用指针类型的形参访问函数外部的对象,在C++语言中,...
C++标准库类型string 头文件#include <string>using std::string;定义与初始化初始化string对象的方法比较多,下面列出最常用的几种:#include <string>#include <iostream>int main(void) { using std::string; string s1; ...
C++标准库类型迭代器 简介所有标准库类型都可以使用迭代器,但是其中只有少数几种才同时支持下标运算符,有迭代器的类型都拥有begin()和end()的成员函数:/* * b和e类型相同 * 1) b: 表示v的第一个元素 * 2) e: 尾后迭代器, 表示尾元素的下一个位置 */auto b = v.begin(), e = v.end();Tips:如果容器为空,那么begin()和end()返回的都...
C++标准库类型vector 头文件#include <vector>using std::vector;定义和初始化vector常用的初始化方法为:// 默认初始化: v不含任何元素, 但是只能添加类型T的元素vector<T> v1;// 拷贝初始化: v2中包含v1所有元素的副本vector<T> v2 = v1;vector<T> v2(v1);/...
C++中变量声明与定义的规则 声明与定义分离Tips:变量能且仅能被定义一次,但是可以被多次声明。为了支持分离式编译,C++将定义和声明区分开。其中声明规定了变量的类型和名字,定义除此功能外还会申请存储空间并可能为变量赋一个初始值。extern如果想声明一个变量而非定义它,就使用关键字extern并且不要显式地初始化变量:extern int i; // 声明i而非定义iextern int i = ...
C++中五花八门的初始化规则 总结初始化的概念:创建变量时赋予它一个值(不同于赋值的概念)类的构造函数控制其对象的初始化过程,无论何时只要类的对象被创建就会执行构造函数如果对象未被用户指定初始值,那么这些变量会被执行默认初始化,默认值取决于变量类型和定义变量的位置无论何时只要类的对象被创建就会执行构造函数,通过显式调用构造函数进行初始化被称为显式初始化,否则叫做隐式初始化使用等号(=)初始化一个类变量执行的是拷贝初...
C++中的POD类型 C++ POD类型背景POD(Plain Old Data)指的是C++定义的和C相兼容的数据结构。几乎所有的系统底层都是用C写的,当时定义的基本数据类型比如int、char、float、枚举、指针、数组和结构等通过二进制拷贝后还能保持数据不变,即编译器可以通过二进制数据将该类型正确解析出来。C++中的类类型引入了继承和派生等新概念,编译器无法解析这些复杂数据结构,因此C++提出POD数...
C++11显式虚函数重载:override与final 场景在传统C++中,经常容易发现意外重载虚函数的事情:struct Base { virtual void foo();};struct SubClass: Base { void foo();};有下列三种场景:SubClass::foo可能是程序员加入的一个和基类虚函数恰好同名的成员函数,却被编译器当作重载虚函数SubClass::foo可能是程序员想重...
解决python3中关于import的疑难杂症 python中import与包管理概念:模块与包模块module:一般是以.py为后缀的文件,也包括.pyo、.pyc、.pyd、.so和.dll后缀的文件,模块内定义了函数、类以及变量包package:包是含有若干个模块的文件夹,在工程项目用包管理模块可以避免模块名冲突__init__.py在Python工程项目中,如果一个文件夹下有__init__.py文件就会认为该文件夹是一个...
《C++Primer》算法概览 C++ 算法概览beg和end表示元素范围的迭代器beg2表示第二个序列开始位置迭代器,end2表示第二个序列末尾迭代器(如果有的话)。如没有end2则假定系列2至少与beg和end表示的范围一样大。beg和beg2类型不必匹配,但必须保证两个序列中的元素可以执行特性操作或调用给定的可调用对象。des表示目的序列的迭代器。对于给定输入序列,算法需要生成多少元素,目的序列保证有足够的空间存放...
《C++Primer》第十九章 第十九章 特殊工具与技术控制内存分配1. 重载new和delete重载这两个运算符与重载其他运算符的过程大不相同。想要真正重载new和delete的方法,首先要对new表达式和delete表达式的工作机制足够了解:// new表达式string *sp = new string("a value"); // 分配并初始化一个string对象string *arr = new stri...
《C++Primer》第十八章 用于大型程序的工具 第十八章 用于大型程序的工具异常处理1. 抛出异常在C++语言中,我们通过抛出throwing一条表达式来引发raised一个异常。当执行一个throw时,跟在throw后面的语句将不再被执行。相反,程序的控制权从throw转移到与之匹配的catch模块。throw类似于return,其后面的代码不会再被执行。1.1 栈展开如果对抛出异常的函数的调用语句位于一个try语句内,则检查...