![](https://img-blog.csdnimg.cn/20201028151119568.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++基础
C++基础知识
喂你的猴子跑了
C/C++、Qt、网络编程
展开
-
72-动态内存申请的结果
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、动态内存申请的结果1)问题 动态内存申请一定成功吗?2)常见的动态内存分配代码C代码:int* p = (int*)malloc(10*sizeof(int)); //(int*)malloc为强转,默认void*if( p != NULL){ // ... ...}C++代码:...原创 2020-09-23 10:23:14 · 184 阅读 · 0 评论 -
71-函数的异常规格说明
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、函数的异常规格说明1)问题 如何判断一个函数是否会抛出异常,以及抛出哪些异常?1、给函数声明抛出异常2、查看文档2)C++提供语法用于声明函数所抛出的异常3)异常声明作为函数声明的修饰符,写在参数列表后面/*可能抛出任何异常*/void func1();/*只能抛出的异常类型:char和int*/v...原创 2020-09-22 13:25:41 · 198 阅读 · 0 评论 -
70-异常处理深度解析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、异常处理深度解析1)问题 如果在main函数中抛出异常会发生什么?2)如果异常不处理,最后会传到哪里?3)下面的代码输出什么?编程实验异常的最终处理?E1-1.cpp#include <iostream>using namespace std;class Test{...原创 2020-09-22 13:10:30 · 1651 阅读 · 1 评论 -
69-技巧:自定义内存管理
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0笔试题一: 统计对象中某个成员变量的访问次数分析:1) 考察面向对象相关的知识2) 考察内容成员变量的访问次数我的思路:定义两个成员变量,一个被访问,一个记录次数缺陷没有考虑种类(只读成员对象)如果是只读对象,成员变量不能被访问!遗失的关键字1)mutable(可变)是为了突破const函数的限制而...原创 2020-09-22 13:01:32 · 268 阅读 · 0 评论 -
68-拾遗:令人迷惑的写法
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、令人迷惑的写法1)下面的程序想要表达什么意思?template <class T> //二义性:1、特定的类类型T 2、限定为自定义类类型Tclass Test //类模板{public: Test(T t){}};template <class T>void func(T a[], int l.原创 2020-09-21 13:24:47 · 152 阅读 · 0 评论 -
67-经典问题解析五
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0面试问题一: 编写程序判断一个变量是不是指针。一、指针的判别1) 拾遗 - C++中仍然支持C语言中的可变参数函数(接收任意类型参数) - C++编译器的匹配调用优先级 1、重载函数 2、函数模板 3、变参函数回顾:重载函数、函数模板、变参函数...原创 2020-09-18 13:26:30 · 104 阅读 · 0 评论 -
66-C++中的类型识别
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、类型识别1) 在面向对象中可能出现下面的情况 - 基类指针指向子类对象 - 基类引用成为了子类对象的别名无法判断p指向父类对象还是子类对象。p期望指向Base*(父类)2) 静态类型—变量(对象)自身的类型(写代码时就能确定类型)3) 动态类型—指针(引用)所指向对象的实际类型问题...原创 2020-09-17 13:01:23 · 190 阅读 · 0 评论 -
65-C++中的异常处理(下)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、C++中的异常处理1)catch语句块中可以抛出异常需要其它处理异常的代码,接受异常。try...catch...异常处理中,也有初始化,不过没有转换,必须严格匹配。try...catch(...)...异常匹配为任意类型,但是不知道参数类型,只能throw再抛出异常(原有类型)问题 为什么要在catch中重新抛...原创 2020-09-17 10:07:00 · 293 阅读 · 0 评论 -
64-C++中的异常处理(上)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、C++异常处理1)C++内置了异常处理的语法元素try...catch... - try语句处理正常代码逻辑 - catch语句处理异常情况 - try语句中异常由对应的catch语句处理try{ double r = divide(1,0);}catch(...){ cout <&...原创 2020-09-16 13:26:39 · 141 阅读 · 0 评论 -
63-C语言异常处理
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、异常处理1)异常的概念 - 程序在运行过程中可能产生异常 - 异常(Exception)与Bug的区别 *异常是程序运行时可预料的执行分支(异常操作) *Bug是程序中的错误,是不被预期的运行方式2)异常(Exception)和Bug的对比: ...原创 2020-09-16 13:18:50 · 288 阅读 · 0 评论 -
62-单例类模板
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、单例模式(设计模式)1)需求的提出在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance)问题如何定义一个类,使得这个类最多只能创建一个对象?2)要控制类的对象数目,必须对外隐藏构造函数3)思路:- 将构造函数的访问属性设置为private(外界无法创建对象)- 定义instance并初始化..原创 2020-09-15 13:19:59 · 205 阅读 · 0 评论 -
61-智能指针类模板
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、智能指针的意义 - 现代C++开发库中最重要的类模板之一 - C++中自动内存管理的主要手段 - 能够在很大程度上避开内存相关的问题(内存忘了释放或者多次指针释放)二、STL中的智能指针auto_ptr - 生命周期结束时,销毁指向的内存空间 - ...原创 2020-09-15 13:12:38 · 123 阅读 · 0 评论 -
60-数组类模板
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、预备知识1)模板参数可以是数值型参数N必须为常数(数值型参数:int、unsigned int、short、unsigned short、long、unsigned long)T泛指类型2)数值型模板参数的限制 - 变量不能作为模板参数(变量在编译期间不能确定数值) - 浮点数不能作为模板参数(计...原创 2020-09-15 13:02:28 · 861 阅读 · 0 评论 -
59-类模板深度剖析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、多参数类模板1)类模板可以定义任意多个不同的类型参数函数模板也可以支持多个不同类型参数。使用类模板必须一一指定类型。2)类模板可以被特化 - 指定类模板的特定实现 - 部分类型参数必须显示指定 - 根据类型参数分开实现类模板特殊化为只接受一个类型(T1和T2类型相...原创 2020-09-14 13:30:17 · 119 阅读 · 0 评论 -
58-类模板的概念和意义
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、思考 在C++中是否能够将泛型的思想应用于类? stl标准库里广泛应用。二、类模板1) 一些类主要用于存储和组织数据元素2) 类中数据组织的方式和数据元素的具体类型无关3) 如:数组类,链表类,Stack类,Queue类,等 C++中将模板的思想应用于类,使得类的实现不关注数据元...原创 2020-09-14 13:10:42 · 145 阅读 · 0 评论 -
57-深入理解函数模板
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、函数模板1)函数模板深入理解(本质) - 编译器从函数模板通过具体类型产生不同的函数 - 编译器会对函数模板进行两次编译 *对模板代码本身进行编译 *对参数替换后的代码进行编译2)注意事项: - 函数模板本身不允许隐式类型转换...原创 2020-09-14 09:57:54 · 129 阅读 · 0 评论 -
56-函数模板的概念和意义
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0进入泛型编程的世界:实际工程中必用的技术,函数模板和类模板就是泛型编程技术。一、发散性问题 C++中有几种交换变量的方法? 二、交换变量的方法 定义宏代码块 VS 定义函数编程实验变量的交换56-1.cpp#include <iostream>#include <stri...原创 2020-09-13 15:38:52 · 120 阅读 · 0 评论 -
55-经典问题解析四
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、关于动态内存分配 new和malloc的区别是什么? delete和free的区别是什么?1)new关键字与malloc函数的区别(表象) - new关键字是C++的一部分 - malloc是由C库提供的函数 - new以具体类型为单位进行内存分...原创 2020-09-12 17:30:50 · 145 阅读 · 0 评论 -
54-被遗弃的多重继承(下)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、多重继承的问题三1)多重继承可能产生多个虚函数表会产生多个虚函数表。编程实验多重继承问题三54-1.cpp#include <iostream>#include <string>using namespace std;class BaseA{public: virtual void funcA...原创 2020-09-12 16:25:52 · 82 阅读 · 0 评论 -
53-被遗弃的多重继承(上)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、问题 C++中是否允许一个类继承自多个父类?二、C++中的多重继承1)C++支持编写多重继承的代码 - 一个子类可以拥有多个父类 - 子类拥有所有父类的成员变量 - 子类继承所有父类的成员函数 - 子类对象可以当作任意父类对象使...原创 2020-09-12 16:05:37 · 93 阅读 · 0 评论 -
52-C++中的抽象类和接口
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、什么是抽象类?1)面向对象中的抽象概念 在进行面向对象分析时,会发现一些抽象的概念! 图形的面积如何计算? 在现实中需要知道具体的图形类型才能求面积, 所有对概念上的“图形”求面积是没有意义的!(因为不知道图形类型)class Shape...原创 2020-09-11 13:34:03 · 150 阅读 · 0 评论 -
51-C++对象模型分析(下)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、继承对象模型1)在C++编译器的内部类可以理解为结构体2)子类是由父类成员叠加子类新成员得到的编程实验继承对象模型初探51-1.cpp#include <iostream>#include <string>using namespace std;class Demo{protected: int mi.原创 2020-09-11 13:25:22 · 181 阅读 · 0 评论 -
50-C++对象模型分析(上)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、回归本质1)class是一种特殊的struct - 在内存中class依旧可以看作变量的集合 - class与struct遵循相同的内存对齐规则 - class中的成员函数与成员变量是分开存放的 * 每个对象有独立的成员变量 * 所有对象共享类中的成员函数2)值得思考的问题...原创 2020-09-10 13:27:51 · 125 阅读 · 0 评论 -
49-多态的概念和意义
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、函数重写顾虑1)父类中被重写的函数依然会继承给子类2)子类中重写的函数将覆盖父类中的函数 (父类函数不能满足子类需求)3)通过作用域分辨符(::)可以访问到父类中的函数Child c;Parent* p = &c;c.Parent::print(); //从父类中继承c.print(); //.原创 2020-09-09 13:19:59 · 208 阅读 · 0 评论 -
48-同名覆盖引发的问题
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、父子间的赋值兼容1)子类对象可以当作父类对象使用(兼容性) - 子类对象可以直接赋值给父类对象 - 子类对象可以直接初始化父类对象 - 父类指针可以直接指向子类对象(子类退化为父类) - 父类引用可以直接引用子类对象(子类退化为父类)编程实验子类对象的兼容性48-1.cpp#include ...原创 2020-09-09 13:12:13 · 743 阅读 · 0 评论 -
47-父子间的冲突
一、思考 子类中是否可以定义父类中的同名成员?如果可以,如何区分?如果不可以,为什么?编程实验同名成员变量47-1.cpp#include <iostream>#include <string>using namespace std;class Parent{public: int mi;};class Child : public Parent{public: int mi;};int main...原创 2020-09-09 12:57:52 · 458 阅读 · 0 评论 -
46-继承中的构造与析构
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、思考 如何初始化父类成员?父类构造函数和子类构造函数有什么关系?二、子类对象的构造1)子类中可以定义构造函数2)子类构造函数 - 必须对继承而来的成员进行初始化 *直接通过初始化列表或者赋值的方式进行初始 *调用父类构造函数进行初始化3)父类构造函...原创 2020-09-08 13:28:20 · 108 阅读 · 0 评论 -
45-不同的继承方式
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、被忽视的细节 冒号(:)表示继承关系,Parent表示被继承的类,public的意义是什么?class Parent{};class Child : public Parent{};二、有趣的问题 是否可以将继承语句中的public换成protected或者private?如果可以,与public继承有...原创 2020-09-08 13:18:57 · 98 阅读 · 0 评论 -
44-继承中的访问级别
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、值得思考的问题 子类是否可以直接访问父类的私有成员?二、思考过程子类不能直接访问父类的私有成员!编程实验继承中的访问级别44-1.cpp#include <iostream>#include <string>using namespace std;class Parent{pri...原创 2020-09-08 13:11:04 · 100 阅读 · 0 评论 -
43-继承的概念和意义
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、思考 类之间是否存在直接的关联关系?二、生活中的例子1)组合关系:整体与部分的关系UML图:菱形实心为组合关系 ,箭头方向指向4个成员对象。实例分析组合关系的描述43-1.cpp#include <iostream>#include <string>using namespace std;...原创 2020-09-07 13:32:50 · 141 阅读 · 0 评论 -
42-类型转换函数(下)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、问题 类类型是否能够类型转换到普通类型?二、类型转换函数1)C++类中可以定义类型转换函数2)类型转换函数用于将类对象转换为其它类型3)语法规则:operator Type(){ Type ret; //... return ret;}编程实验类型转换函数初探42-1.cpp#i...原创 2020-09-07 13:19:01 · 104 阅读 · 0 评论 -
41-类型转换函数(上)
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、再论类型转换1)标准数据类型之间会进行隐式的类型安全转换2)转换规则如下:实验分析有趣的隐式类型转换41-1.cpp#include <iostream>#include <string>using namespace std;int main(){ short s = 'a'; unsi.原创 2020-09-07 13:12:13 · 94 阅读 · 0 评论 -
40-前置操作符和后置操作符
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、值得思考的问题1)下面的代码有没有区别?为什么?i++; //i 的值作为返回值,i自增1。++i; //i自增1,i的值作为返回值test.cpp#include <iostream>using namespace std;int main(){ int i = 0; //++i..原创 2020-09-07 09:54:12 · 123 阅读 · 0 评论 -
39-逗号操作符的分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、逗号操作符1)逗号操作符(,)可以构成逗号表达式 - 逗号表达式用于将多个子表达式连接为一个表达式 - 逗号表达式的值为最后一个子表达式的值 - 逗号表达式中的前N-1个子表达式可以没有返回值 - 逗号表达式按照从左向右的顺序计算每个子表达式的值 exp1,exp2,exp3,……,expN...原创 2020-09-06 16:12:17 · 130 阅读 · 0 评论 -
38-逻辑操作符的陷阱
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、潜规则1) 逻辑运算符的原生语义 - 操作数只有两种值(true和false) - 逻辑表达式不用完全计算就能确定最终值(重点:短路法则) - 最终结果只能是true或者false编程实验逻辑表达式38-1.cpp#include <iostream>#include ...原创 2020-09-06 16:01:02 · 150 阅读 · 0 评论 -
37-智能指针分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、永恒的话题1)内存泄露(臭名昭著的Bug) - 动态申请堆空间,用完后不归还 - C++语言中没有垃圾回收的机制 - 指针无法控制所指堆空间的生命周期编程实验内存泄露37-1.cpp#include <iostream>#include <string>...原创 2020-09-06 15:12:26 · 97 阅读 · 0 评论 -
36-经典问题解析三
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、关于赋值的疑问 什么时候需要重载赋值操作符?编译器是否提供默认的赋值操作?1)编译器为每个类默认重载了赋值操作符(同类型对象直接赋值是没有问题的)2)默认的赋值操作符仅完成了浅拷贝3)当需要进行深拷贝时必须重载赋值操作符4)赋值操作符与拷贝构造函数有相同的存在意义重载赋值操作符,函数中有什么?赋值操作符主要是完成成员...原创 2020-09-06 15:00:55 · 821 阅读 · 0 评论 -
35-函数对象分析
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、客户需求1)编写一个函数 - 函数可以获得斐波那契数列每项的值 - 每调用一次返回一个值 - 函数可根据需要重复使用for(int i=0; i<10; i++){ cout << fib() << endl;}斐波那契数列,递推公式:...原创 2020-09-06 14:36:48 · 98 阅读 · 0 评论 -
34-数组操作符的重载
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、问题 string类对象还具备C方式字符串的灵活性吗?还能直接访问单个字符吗?二、字符串类的兼容性1)string类最大限度的考虑了C字符串的兼容性(通过数组元素访问单个字符)2)可以按照使用C字符串的方式使用string对象string s = "a1b2c3d4e";int n = 0;for(int i = 0; i...原创 2020-09-06 11:12:54 · 179 阅读 · 0 评论 -
33-C++中的字符串类
注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。测试环境:Ubuntu 10.10GCC版本:9.2.0一、历史遗留问题1)C语言不支持真正意义上的字符串2)C语言用字符数组和一组函数实现字符串操作3)C语言不支持自定义类型,因此无法获得字符串类型二、解决方案1)C到C++的进化过程引入了自定义类型2)在C++中可以通过类完成字符串类型的定义 问题: C++中的原生类型系统是否包含字符串类型?...原创 2020-09-02 13:27:40 · 157 阅读 · 1 评论