C++
文章平均质量分 79
xiebs_
我对不起唐老师
展开
-
48、赋值兼容性原则以及同名覆盖引发的问题
1、父子间的赋值兼容子类对象可以当做父类对象使用(兼容性)— 子类对象可以直接赋值给父类对象— 子类对象可以直接初始化父类对象— 父类指针可以直接指向子类对象— 父类引用可以直接引用子类对象当使用父类指针(引用)指向子类对象时— 子类对象退化为父类对象— 只能访问父类中定义的成员— 可以直接访问被子类覆盖的同名成员#include <iostream>...原创 2019-09-09 16:30:10 · 404 阅读 · 0 评论 -
string类的成员函数
1、swap(s1,s2) —— 交换两个字符串的内容2、s.length() 和 s.size( ) —— 都表示返回字符的数量3、s.substr(pos) —— 返回 pos 之后的那半边字符串4、s.substr(a,pos) ——返回 a 到 pos 之间的字符串5、+= —— 表示两个字符串合并在一起...原创 2019-09-01 20:31:55 · 2121 阅读 · 1 评论 -
C++基础数据结构STL
在C++里有写好的标准模板库,我们称为STL库。它实现了集合、映射表、栈、队列等数据结构和排序、查找等算法。我们可以很方便地调用标准库来进行各类操作。动态数组引用库有时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组可能会根据情况变动,这个时候我们就需要用到动态数组了。C++中的动态数组写作 vector,它的实现被写在 vector 的头文件中,并在所有头文件之后加上一句 using namespac std#include <iostream>#in转载 2020-08-29 16:00:13 · 334 阅读 · 0 评论 -
C++外传3、动态内存申请的结果
1、问题动态内存申请一定成功吗?常见的动态内存分配代码原创 2019-11-19 22:31:30 · 91 阅读 · 0 评论 -
C++外传2、函数的异常规格说明
1、问题如何判断一个函数是否会抛出异常,以及抛出那些异常?2、 函数的异常规格说明C++提供语法用于声明函数所抛出的异常异常声明作为函数声明的修饰符,写在参数列表后面...原创 2019-11-19 21:18:46 · 204 阅读 · 0 评论 -
C++外传1、异常处理深度解析
1、问题如果在 main 函数中抛出异常会发生什么?如果异常不处理,最后会传到哪里?原创 2019-11-19 19:53:37 · 127 阅读 · 0 评论 -
69、自定义内存管理
1、关键字 mutable笔试题统计对象中某个成员变量的访问次数#include <iostream>#include <string>using namespace std;class Test{ int m_value; int m_count;public: Test(int value = 0) { m_value = value...原创 2019-11-18 19:21:46 · 173 阅读 · 1 评论 -
68、令人迷惑的写法
下面的程序想要表达什么意思?#include <iostream>#include <string>using namespace std;template <class T>class Test{public: Test(T i) { cout << "Test(T i): " << i << ...原创 2019-11-16 23:00:34 · 141 阅读 · 0 评论 -
49、多态的概念和意义
1、函数重写回顾父类中被重写的函数依然会继承给子类子类中重写的函数将覆盖父类中的函数通过作用域分辨符(::)可以访问到父类中的函数Child c;Parent* p = &c; c.Parent::print(); //从父类在继承c.print(); //在子类中重写 p->print(); //父类中定义2、多态的概念和...原创 2019-09-09 18:43:13 · 432 阅读 · 0 评论 -
57、深入理解函数模板
1、函数模板深入理解— 编译器从函数模板通过具体类型产生不同的函数— 编译器会对函数模板进行两次编译 1、对模板代码本身进行编译 2、对参数替换后的代码进行编译注意事项— 函数模板本身不允许隐式类型转换 1、自动推导类型时,必须严格匹配 2、显示类型指定时,能够进行隐式类型转换 程序1:证明编译器会对函数模板进行两次编译#include <iostream>...原创 2019-09-16 12:07:45 · 172 阅读 · 0 评论 -
50、C++对象模型分析(上)
1、回归本质class 是一种特殊的struct— 在内存中 class 依旧可以看做变量的集合— class 与 struct 遵循相同的内存对齐规则— class 中的成员函数与成员变量是分开存放的 1、每个对象有独立的成员变量 2、所有对象共享类中的成员函数指的思考的问题#include <iostream>#include <string&...原创 2019-09-10 11:42:20 · 113 阅读 · 0 评论 -
51、C++对象模型分析(下)
1、继承对象模型在C++编译器的内部类可以理解为结构体子类是由父类成员叠加子类新成员得到的class Derived : public Demo{ int mk;};如何证实子类里面成员变量的分布真的如图所示,父类在前,子类在后:#include <iostream>#include <string>using namespace std;c...原创 2019-09-10 16:52:33 · 133 阅读 · 1 评论 -
47、父子间的冲突
1、思考子类中是否可以定义父类中的同名成员?如果可以,如何区分?如果不可以,为什么?#include <iostream>#include <string>using namespace std;class Parent{public: int mi;};class Child :public Parent{ public: int mi;...原创 2019-09-09 12:10:14 · 147 阅读 · 0 评论 -
46、继承中的构造与析构
1、思考如何初始化父类成员?父类构造函数和子类构造函数有什么关系?2、子类对象的构造子类中可以定义构造函数子类构造函数— 必须对继承而来的成员进行初始化 1、直接通过初始化列表或者赋值的方式进行初始化 2、调用父类构造函数进行初始化...原创 2019-09-07 16:01:47 · 109 阅读 · 0 评论 -
45、不同的继承方式
1、被忽视的细节冒号(:)表示继承方式,Parent 表示被继承的类,public 的意义是什么?2、有趣的问题是否可以将继承语句中的 public 换成 protected 或 private?如果可以,与public继承有什么区别?#include <iostream>#include <string>using namespace std;class ...原创 2019-09-07 10:06:05 · 158 阅读 · 0 评论 -
44、继承中的访问级别
1、指的思考的问题子类是否可以直接访问父类的私有成员?1、根据面向对象的理论:2、根据C++语法:实验检验:#include <iostream>#include <string>using namespace std;class Parent{ int i;public: Parent(int i = 0) { this->i...原创 2019-09-06 20:04:39 · 171 阅读 · 0 评论 -
43、继承的概念和意义
1、思考类之间是否存在直接的关联关系?2、 组合关系:整体与部分的关系#include <iostream>#include <string>using namespace std;class Memory{public: Memory() { cout << "Memory()" << endl; } ~Memory...原创 2019-09-06 17:30:45 · 177 阅读 · 0 评论 -
42、类型转换函数(下)
1原创 2019-09-05 20:19:15 · 121 阅读 · 0 评论 -
41、转换构造函数(上)
1、再论类型转换标准数据类型之间会进行隐式类型转换转换规则如下原创 2019-09-05 20:18:39 · 188 阅读 · 0 评论 -
40、前置操作符和后置操作符
1、原创 2019-09-05 16:02:57 · 341 阅读 · 0 评论 -
52、C++中的抽象类和接口
1、什么是抽象类面向对象中的抽象概念在进行面向对象分析时,会发现一些抽象的概念图形的面积如何计算?原创 2019-09-11 10:08:52 · 158 阅读 · 0 评论 -
53、被遗弃的多重继承(上)
1、问题C++中是否允许一个类继承自多个父类?2、C++中的多重继承C++支持编写多重继承的代码— 一个子类可以拥有多个父类— 子类拥有所有父类的成员变量— 子类继承所有父类的成员函数— 子类对象可以当做任意父类对象使用多重继承的语法规则class Derived : public BaseA , public BaseB , public BaseC{ //...};...原创 2019-09-11 10:43:00 · 142 阅读 · 0 评论 -
54、被遗弃的多重继承(下)
1、多重继承的问题3多重继承可能产生多个虚函数表如果 BaseA 和 BaseB 这两个类里面都有定义虚函数的话,都会有虚函数表,由于继承的本质就是成员叠加,所以子类 Derived 的内部就会有两个虚函数指针,分别指向不同的虚函数表。...原创 2019-09-11 18:35:59 · 216 阅读 · 0 评论 -
67、经典问题解析五
1、面试问题编写程序判断一个变量是不是指针。原创 2019-09-22 12:13:25 · 130 阅读 · 0 评论 -
66、C++中的类型识别
回顾 赋值兼容性原则:— 子类对象可以直接赋值给父类对象— 子类对象可以直接初始化父类对象— 父类指针可以直接指向子类对象— 父类引用可以直接引用子类对象1、类型识别在面向对象中可能出现下面的情况— 基类(父类)指针指向子类对象— 基类(父类)引用直接引用子类对象,成为子类对象的别名期望的类型是静态类型,指向的对象是动态类型。静态类型 — 变量(对象)自身的类型动态类型 ......原创 2019-09-22 10:58:12 · 633 阅读 · 0 评论 -
65、C++中的异常处理(下)
1、C++中的异常处理catch 语句块中可以抛出异常分析:本来一般是 try 里面运行函数,函数里面如果出现异常就会 throw 出一个参数,然后 catch 接收。但是在 catch 里面还能抛出一个 throw 出来,这个 throw 就需要外层的 try…catch…接收。问题:为什么要在 catch 中重新抛出异常呢?catch 中捕获的异常可以被重新解释后抛出工程开发...原创 2019-09-22 09:06:00 · 209 阅读 · 0 评论 -
64、C++中的异常处理(上)
1、C++中的异常处理C++内置了异常处理的语法元素 try…catch…— try 语句处理正常代码逻辑— catch 语句处理异常情况— try 语句中的异常由对应的 catch 语句处理try{ double r = divide(1, 0);}catch (...){ cout << "devide by zero..." << endl;...原创 2019-09-20 20:35:33 · 121 阅读 · 0 评论 -
63、C语言异常处理
1、异常处理异常和Bug的区别— 异常:程序运行时可预见的问题。(比如:两个数相除,我们要考虑到被除数为 0 程序会有异常)例子:运行时产生除0的情况,需要打开的外部文件不存在,数组访问越界— Bug:程序中的错误,是不被预期的运行方式例子:使用野指针,堆数组使用结束后未释放,选择排序无法处理长度为 0 的数组C语言经典处理方式:if…else…void func()...原创 2019-09-20 17:57:44 · 657 阅读 · 0 评论 -
62、单例类模板
1、单例模式需求的提出在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在(Single Instance)。提出问题:如何定义一个类,使得这个类最多只能创建一个对象?解析:要控制类的数目,必须对外隐藏构造函数思路— 将构造函数的访问属性设置为 private— 定义 instance 并初始化为 NULL— 当需要使用对象时,访问 instance 的值 1...原创 2019-09-20 16:20:27 · 179 阅读 · 0 评论 -
61、智能指针类模板
1、智能指针智能指针的意义— 现代C++开发库中最重要的类模板之一— C++中自动内存管理的主要手段— 能在很大程度上避开内存相关的问题STL中的智能指针 auto_ptr(#include < memory >)— 生命周期结束时,销毁指向的内存空间— 不能指向堆数组(只能指向对象或者变量)— 一片内存空间只属于一个智能指针对象— 多个智能指针对象不能指向通一片内...原创 2019-09-19 21:21:33 · 366 阅读 · 0 评论 -
60、数组类模板
1、预备知识模板参数可以是数值型参数(非类型参数)template < typename T, int N >void func(){ T a[N]; //使用模板参数定义局部数组}func<float, 10>();数值型模板参数的限制— 变量不能作为模板参数— 浮点数不能作为模板参数— 类对象不能作为模板参数— …本质:模......原创 2019-09-17 11:18:51 · 707 阅读 · 0 评论 -
59、类模板深度剖析
1、多参数类模板类模板可以定义任意多个不同的类型参数template <typename T1, typename T2>class Test{public: void add(T1 a, T2 b);};Test <int, float> t; //定义对象类模板可以被特化— 指定类模板的特定实现— 部分类型参数必须显示指定— 根据...原创 2019-09-16 17:51:53 · 92 阅读 · 0 评论 -
58、类模板的概念和意义
1、思考在C++中是否能够将泛型的思想运用于类?原创 2019-09-16 12:17:49 · 174 阅读 · 0 评论 -
56、函数模板的概念和意义
1、发散性的问题:C++中有几种交换变量的方法?答:两种,定义宏代码块 VS 定义函数#define SWAP(t,a,b) \{ \ t c = a; \ a = b; \ b = c; \}void Swap(int& a, int& b){ int c = a; a...原创 2019-09-12 16:13:52 · 374 阅读 · 0 评论 -
55、经典问题解析四
1、关于动态内存分配new 和 malloc 的区别是什么?— new关键字是C++的一部分 — malloc是由C库提供的函数— new以具体类型为单位进行内存分配 — mallo以字节为单位进行内存分配— new在申请空间时可进行初始化 — malloc仅根据需要申请定量的内存空间delete 和 free 的区别是什么?...原创 2019-09-11 22:25:24 · 240 阅读 · 0 评论 -
39、逗号操作符的分析
1、逗号操作符逗号操作符(,)可以构成逗号表达式— 逗号表达式用于将多个子表达式连接为一个表达式— 逗号表达式的值为最后一个子表达式的值— 逗号表达式的前 N-1 个子表达式可以没有返回值— 逗号表达式按照从左向右的顺序计算每个子表达式的值程序一:逗号表达式的知识回顾#include <iostream>#include <string>using ...原创 2019-09-05 12:04:38 · 362 阅读 · 0 评论 -
38、逻辑操作符的陷阱
1、潜规则逻辑操作符的原生语义— 操作数只有两种值(true 和 false)— 逻辑表达式不用完全计算就能确定最终值— 最终结果只能是 true 或者 false原创 2019-09-04 20:38:46 · 148 阅读 · 0 评论 -
37、智能指针的分析
1、永恒的话题内存泄漏(臭名昭著的Bug)— 动态申请堆空间,用完不还— C++语言中没有垃圾回收的机制— 指针无法控制所指堆空间的生命周期#include <iostream>#include <string>using namespace std;class Test{private: int i;public: Test(int i)...原创 2019-09-04 17:06:37 · 444 阅读 · 0 评论 -
25、类的静态成员函数
1、上个程序未达到需求随时可以获取当前对象的数目(failure)错误原因:上一个程序如果我们没有定义对象,那怎么输出对象的数目呢?我想到的解决方案是把静态局部变量变成公有。这样可以不用通过对象,直接通过类名就可以直接访问静态局部变量。#include <stdio.h>class Test {public: static int sCount;public: T...原创 2019-08-21 11:57:25 · 666 阅读 · 0 评论 -
3、布尔类型和引用
1、C++中的布尔类型— C++在C语言的基本类型系统之上增加了bool— C++中的bool可取的值只有true和false— 理论上bool只占一个字节注意:true代表真值,编译器内部用1来表示false代表非真值,编译器内部用0来表示2、布尔类型的值bool类型只有true(非0)和false(0)两个值C++编译器会将非0值转换成true,0值转换成false下面的...原创 2019-08-12 15:40:43 · 1070 阅读 · 0 评论