C++基础
文章平均质量分 78
C++基础,个人复习笔记
方池安夏
谎言不会伤人,真相才是快刀
展开
-
C++后台面试题汇总---持续更新中
从以下几个方面去讨论static的作用修饰的对象: 变量, 函数使用场景:作用是避免了命名重复, 对其他源文件隐藏该变量和隔离错误的作用,有利于模块化程序const关键字的作用:修饰变量两种:全局const和局部const,**注意:**在C语言中,局部const是可以通过指针进行修改的,而在C++中,会把const修饰的所有常量会加载到符号表当中,每次获取const常量都会在符号表中查询,因此C++中的局部const成员无法修改,而全局const不管C/C++都不能通过指针修改另外,关于const原创 2022-07-04 22:06:17 · 719 阅读 · 0 评论 -
g++编译参数---CMake详细使用教程---Linux--基于VSCode和CMake实现C/C++开发--笔记
目录一:软件安装二:g++编译过程1.预处理-Pre-Processing (.i文件)2.编译-Compiling (.s文件)3.汇编-ASSembling (.o文件)4.链接-LinKing三: g++重要编译参数-g 编译带调试信息的可执行文件-O[n] 优化源代码-l 和 -L 指定库文件 | 指定库文件路径-I 指定头文件搜索目录-Wall 打印警告信息-w 关闭警告信息-o 指定输出文件名-D 定义宏四:编译实战1.直接编译 2原创 2022-03-22 00:00:47 · 3624 阅读 · 0 评论 -
模板与泛型
目录模板定义函数模板定义形式模板说明函数定义函数模板调用非类型模板参数类模板的使用为什么需要类模板类模板作为函数参数类模板函数的三种表达描述方式所有的类模板函数写在类的内部所有的类模板函数写在类的外部,在一个cpp中所有的类模板函数写在类的外部,在不同的.h和.cpp中模板定义函数重载的例子#include <iostream>using namespace std;int Max(int a, int b){ return a>b ? a:b;}char Max(c原创 2022-02-28 15:53:16 · 827 阅读 · 0 评论 -
智能指针的用法shared_ptr
目录智能指针shared_ptr共享的智能指针shared_ptr的基本用法1.初始化reset成员函数make_sharedswap()函数2. 获取原始指针(get())3. 指定删除器使用shared_ptr要注意的问题1.慎用智能指针不要用一个原始指针初始化多个shared_ptr通过shared_from_this()返回this指针。补充: new\delete和malloc\freehttps://blog.csdn.net/A_With_better/article/details/12原创 2022-02-27 21:44:15 · 1812 阅读 · 0 评论 -
new和malloc的区别/其他补充calloc()/realloc()
目录malloc()calloc()realloc()new和malloc的区别malloc()#include <stdlib.h>void *malloc(size_t size)参数size – 内存块的大小,以字节为单位。返回值该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。示例 char *str; str = (char *) malloc(15);补充两个其他C库函数calloc()描述C 库函数 voi原创 2022-02-26 15:04:17 · 145 阅读 · 0 评论 -
类成员函数指针
目录类成员函数指针普通成员函数虚成员函数静态成员函数类成员函数指针普通成员函数类被需要的时候会被载入内存,当然类成员函数也会被载入内存,所以类的成员函数是有真正的内存地址的,这个地址一般跟具体的类对象没有什么关系类成员函数指针,通俗的讲,是一个指针,指向类成员函数使用方法如下示例#include <iostream>#include <string.h>using namespace std;class CT{public: void func(int原创 2022-02-22 23:33:46 · 3125 阅读 · 0 评论 -
移动构造函数/移动赋值运算符/合成的移动操作
目录移动构造函数演示移动赋值运算符移动构造函数演示#include <iostream>using namespace std;class B{public: B() :m_bm(100) { cout << "执行了类B的构造函数" << endl; } B(const B& tmp) : m_bm(tmp.m_bm) { cout << "执行了一次类B的拷贝构造函数" << endl; } virtual ~B原创 2022-02-22 22:49:44 · 447 阅读 · 0 评论 -
产生临时对象的情况和性能优化
目录产生临时对象的情况和解决方案1.以传值的方式给函数传递参数2.类型转换生成的临时对象/隐式类型转换以保证函数调用成功3.函数返回对象的时候产生临时对象的情况和解决方案1.以传值的方式给函数传递参数执行以下案例:传值时的赋值操作#include <iostream>using namespace std;class CTempValue{public: int val1; int val2;public: CTempValue(int v1 = 0, int原创 2022-02-11 23:13:26 · 480 阅读 · 0 评论 -
左值/右值/左值引用/右值引用/move的用法介绍
目录问题左值和右值概念总结:需要用到左值的运算符:问题什么是左值和右值?什么是左/右值引用?左/右值引用的作用是什么?move的用法?左值和右值声明:这里只做理解性介绍一般来讲,需要名字(变量名)来表示内存中的某些数据,如int i = 100;这里, “i"是一个整形变量, 也可以叫做对象, 对象指的就是一块存储区域.左/右值解释:左值,从字面意思来讲就是:“能用在赋值语句等号左侧的内容”,(它得代表一个地址),为了把左值这个概念阐述的更清楚, 又定义了"右值"的概念,他是为了对原创 2022-02-10 19:05:00 · 1031 阅读 · 0 评论 -
持续更新--面试问题
为什么基类的析构一定要写成虚函数?原创 2022-02-09 21:52:34 · 76 阅读 · 0 评论 -
dynamic_cast的详细用法,typeid运算符简介
RTTIdynamic_cast详细用法dynamic_cast详细用法代码演示:下面根据这个例子讲:father.h#pragma once#include <iostream>using namespace std;class Father{public: Father(); virtual ~Father(); virtual void play();};father.cpp#include "Father.h"Father::Father(){原创 2021-12-14 16:17:11 · 1907 阅读 · 1 评论 -
友元---友元类
友元友元类几点说明友元类写法用friend修饰类声明示例#include <iostream>using namespace std;class B; //类B声明class A{private: int data; friend class B; //这里是友元类的声明.};class B{public: void func(int x, A &a) { a.data = x; cout << a.data <&原创 2021-12-06 16:03:39 · 279 阅读 · 1 评论 -
多态性---虚函数的使用
多态性的解释(1)体现在具有继承关系的父类和子类之间.子类重新定义(覆盖/重写)父类的成员函数,同时父类和子类中又把这个函数声明为了virtual函数(2)通过父类的指针,只有到了程序运行时期,根据具体执行到的代码行,才能找到动态绑定到父类指针上的对象(new的是哪个),这个对象是某个子类对象,或者父类对象,系统内部实际上是要查类的虚函数表,根据虚函数表找到函数的入口地址,从而调用父亲或者子类的虚函数...原创 2021-12-05 17:53:49 · 1721 阅读 · 0 评论 -
C++/子类介绍/访问等级/成员函数同名问题
子类概念继承概念类之间的有一种层次关系,有父亲类,孩子类.父类:基类,超类孩子类:子类,派生类继承:有父亲类,有孩子类,构成了层次关系(面向对象有三个核心:继承,封装,多态)继承这种继承,简单说就是需要先定义一个父类,父类中定义一些公用的成员变量,成员函数,我们通过继承父类来构建新的类,也就是子类;所以,写代码时,只需要写和子类相关的一些内容即可....原创 2021-11-23 17:15:45 · 699 阅读 · 0 评论 -
C++/构造函数/拷贝构造函数/运算符重载/析构函数
构造函数系统在没有构造函数时,会生成一个"合成的默认构造函数",这个能干的事情很简单,合成默认构造函数无法正确的处理很多成员变量初始化问题,例如一个类中包含一个其他类型的成员变量,而这个其他类中存在位移的构造函数并且是带单参数的,那么编译器就无法初始化该成员变量,所以必须定义自己的构造函数下面是错误代码:class Other{public: Other(int) {};};class One{public: Other o1;};int main(){ //One tes原创 2021-11-23 11:26:15 · 780 阅读 · 0 评论 -
宏定义与常量const,条件编译,以及防止头文件重复包含
条件编译作用:一般情况下,生成可执行文件过程中,程序源文件所有代码都会编译,但是有时候希望对其中一部分,或者满足条件的情况下编译比如一些跨平台操作系统代码,要求代码要在Windows下编译运行,也能在Linux下编译运行,但程序代码中有些特殊的系统调用函数只能在Windows下运行或者只能运行在Linux下,这时候有必要用到条件编译#ifdef#ifdef 标识符 //程序代码 ...#else //程序代码 ...#endif例#define DEBUG 1//类似if语句,原创 2021-08-25 08:37:48 · 394 阅读 · 0 评论 -
vector简单介绍,后续补充
vector常用写法 //定义 vector<string> mystr; //末尾追加 mystr.push_back("abcd"); mystr.push_back("def"); //拷贝 vector<string> mystr2(mystr); vector<string> mystr3 = mystr; //C++11初始化 vector<string>def = {"aaa", "bbb", "ccc"}; /原创 2021-09-15 16:35:39 · 123 阅读 · 0 评论 -
迭代器iterator
…iteratorn. 迭代器;迭代程序(有道翻译)…用法…初始化 vector<int> iv = { 100, 200, 300 }; vector<int>::iterator iter; //定义迭代器, 类型同样为vector<int> begin()/end()和rbegin()/rend()用于返回迭代类型 iter = iv.begin(); //如果容器中有元素, 指向容器中的第一个元素 iter = iv.end()原创 2021-09-16 19:54:31 · 251 阅读 · 0 评论 -
c++风格强制类型转换: static_cast, reinterpret_cast, reinterpret_cast,const_cast
隐式类型转换//系统自动转换 int m = 3 + 45.6; double n = 3 + 45.6;显式类型转换也叫强制类型转换 //c语言风格强制类型转换 //int k = 5 % 3.2\; //语法错误 int k = 5 % (int)3.2; //编译通过 int k = 5 % int(3.2); //另一种写法,也OKc++中,强制类型转换分为4中,4中类型转换用于不同的目的,C++中为了提供更好的类型检查机制, 方便代码书写和维护.C++写法//stati原创 2021-09-17 18:35:30 · 270 阅读 · 0 评论 -
C++/类/inline/const/mutable/this/static
C++/类inlineconst(类中用法)mutablethisstaticinlineclass Time{public: Time(); Time(int hour, int min, int psec);public: int m_hour; int m_min; int m_psec;public: void addhour(int tmphour) { m_hour += tmphour; }};如上代码,addhour这种直接在类定义中实现的成员函数会原创 2021-11-19 16:11:03 · 603 阅读 · 0 评论