- 博客(121)
- 资源 (5)
- 收藏
- 关注
原创 C++类型识别
C++类型识别在面向对象中可能出现的问题基于指针指向子类对象基于引用成为子类对象别名静态类型: 变量(对象)自身的类型动态类型:指针(引用)所指向对象的实际类型动态识别解方案 利用多态在基类中定义虚函数返回具体的类型信息所有的派生类都必须实现类型相关的虚函数每个类中的类型虚函数都需要不同的实现多态解决方案的缺陷必须从基类开始提供类型虚函数所有的派生类都必须重写类型虚函数每个派生类的类型名必须唯一关键识别关键字typeid关键字返回对应参数的类型.
2021-11-11 13:45:16
596
原创 C++异常处理
C++异常处理try…catch…try语句处理正常代码逻辑catch语句处理异常情况try语句中的异常由对应的catch语句处理try{ double d = 1/0;}catch(...){ cout<<"Error"<<endl;}throw语句抛出异常throw抛出的异常必须被catch处理当前函数能够处理异常,程序继续往下执行当前函数无法处理异常,则函数停止执行,并返回未被处理的异常会顺着函数调用栈向上传播,.
2021-11-11 13:44:24
439
原创 C语言异常处理
C语言异常处理异常的概念程序再运行过程中可能产生异常异常(Exception)与Bug的区别异常是程序运行时可预料的执行分支Bug是程序中的错误,不是被预期的运行方式异常与Bug的对比异常运行时产生除零的情况需要打开的外部文件不存在数组访问越界Bug使用野指针堆数组使用结束后未释放选择排序无法处理长度为0的数组函数int setjump(jmp_buf env)将当前上下文保存再jmp_buf结构体中void longjmp(jmp_b.
2021-11-11 13:43:46
557
原创 数组类模板
数组类模板预备知识模板参数可以是数值型参数(非类型参数)template<typename T, int N>void func(){ T a[N];}数值型模板参数的限制变量不能作为模板参数浮点数不能作为模板参数类对象不能作为模板参数模板参数是在编译阶段被处理的单元再编译阶段必须准确无误的唯一确定小结模板参数可以是数值型参数数值型模板参数必须再编译期间唯一确定数组类模板是基于数值型模板参数实现的...
2021-11-11 13:42:46
177
原创 C++类模板
类模板一些主要用于存储和组织数据元素类中数据组织的方式和数据元素的具体类型无关数组类,链表类,Stack类,Queue类C++中的类模板以相同的方式处理不同的类型以类声明前使用template进行标识<typename T>用于说明类中使用的泛型Ttemplate <typename T>class Operator{public: T op(T a,T b){};};类模板的应用只能显示指定具体类型,无法自动推导使用具体类型&.
2021-11-11 13:42:00
506
原创 C++函数模板
C++函数模板泛型编程泛型编程的概念不考虑具体数据类型的编程方式void Swap(T& a,T& b){ T t = a; a = b; b = t;}//Swap泛型写法中的T不是一个具体数据类型,而是泛指任意的数据类型函数模板C++泛型编程函数模板一种特殊的函数可用不同类型进行调用看起来和普通函数相似,区别是类型可被参数化template<typename T>void Swap(T&.
2021-11-10 13:52:16
86
原创 C++被遗弃的多重继承
C++被遗弃的多重继承C++中的多重继承C++支持编写多重继承一个子类可以拥有多个父类子类拥有所有父类的成员变量子类继承所有父类的成员函数子类对象可以当作任意父类对象使用//class Derived : public BaseA, public BaseB, public BaseC{ }多重继承的问题问题一通过多继承得到的对象可能拥有“不同的地址”问题二多重继承可能产生冗余处理方案:虚.
2021-11-10 13:51:35
111
原创 抽象对象和接口
抽象对象和接口抽象面向对象中的抽象类可用于表示显示世界中的抽象概念是一种只能定义类型,而不能产生对象的类只能被继承并重写相关函数直接特征是相关函数没有完整的实现抽象类与虚函数C++语言中没有抽象类的概念C++中通过纯函数实现抽象类纯函数是指定义原型的成员函数一个C++类中存在纯函数就成为了抽象函数纯虚函数的语法规则class Shape{public: virtual double area() = 0;};“=0” 用于告诉编译器当前是声明纯虚.
2021-11-10 13:50:50
83
原创 C++对象模型分析
C++对象模型分析class是一种特殊的struct在内存中class依旧可以看作变量的集合class与struct遵循相同的内存对齐规则class中的成员函数与成员变量是分开存放的每个对象有独立的成员变量所有对象共享类中的成员函数#include <iostream>using namespace std;class A{ int i; int j; char c; double d;};struct B{ .
2021-11-10 13:50:10
87
原创 多态的概念和意义
多态的概念和意义函数重写回顾父类中被重写的函数依然会继承给子类子类中重写的函数将覆盖父类中的函数通过作用域分辨符(::)可以访问到父类中的函数面向对象中期望的行为根据实际的对象类型判断如何调用重写函数父类指针(引用)指向父类对象则调用父类中定义的函数子类对象则调用子类中定义的重写函数面向对象中的多态的概念根据实际的对象类型决定函数调用的具体目标同样的调用语句在实际运行时有多种不同的表现形态C++语言支持多态通过使用virtual关键字对多态进行支持被vi.
2021-11-10 13:49:21
123
原创 同名覆盖的问题
同名覆盖的问题父子之间的赋值兼容(子类对象可以当作父类对象使用)子类对象可以直接赋值给父类对象子类对象可以直接初始化父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象#include <iostream>using namespace std;class Parent{public: int mi; int add(int i) { mi += i; return mi; } int .
2021-11-10 13:48:10
99
原创 父子之间的冲突
父子之间的冲突父子之间变量的冲突子类可以定义父类中的同名成员子类中的成员将隐藏父类中的同名成员父类中的同名成员依然存在于子类中通过作用域分辨符(::)访问父类中的同名成员#include <iostream>using namespace std;class Parent{public: int i; Parent() { cout<<"Parent() : "<<"&i = "<&l.
2021-11-10 13:47:28
88
原创 继承中的构造和析构
继承中的构造和析构子类对象的构造子类中可以定义构造函数子类构造函数必须对继承而来的成员进行初始化直接通过初始化列表或者赋值的方法进行初始调用父类构造函数进行初始化父类构造数在子类中的调用方式默认调用适用于无参构造函数和使用默认参数的构造函数显示调用通过初始化列表进行调用适用于所有父类构造函数构造规则子类对象在创建时会先调用父类的构造函数先执行父类构造函数再执行子类的构造函数父类构造函数可以被隐式调用或者显示调用对象创建时构造.
2021-11-10 13:46:55
102
原创 不同的继承方式
不同的继承方式被忽视的细节class Parent{};class Child:public Parent{};冒号(:)标识继承关系,Parent被继承的类public的意义是什么意思?可以将public替换成protected或者private吗?替换后和public的区别是什么?#include <iostream>using namespace std;class Parent{};class Child1:public Parent{};clas.
2021-11-10 13:46:24
78
原创 继承中的访问级别
继承中的访问级别FilePath: /WorkSpace/C++/20C++中类的继承/28-1.cpp */#include <iostream>#include <string>#include <sstream>using namespace std;class Object{protected: string mName; string mInfo;public: Object(); string name.
2021-11-10 13:45:09
76
原创 类型转换函数
类型转换函数标准数据类型之间会进行隐式的类型安全转换转换规则(char->short)->int->unsigned int->long->unsigned long->float->double再论构造函数构造函数可以定义不同类型的参数参数满足下列条件时称为转换构造函数有且仅有一个参数参数是基本类型参数是其他类类型编译器的行为编译器尽力尝试的结果是隐式类型转换隐式类型转换会出现意想不到的方式进行工作是bug产生的重要来.
2021-11-09 14:49:25
158
原创 C++智能指针
智能指针永恒的话题内存泄漏动态申请堆空间,用完后不归还C++语言中没有垃圾回收的机制指针无法控制所指堆空间的生命周期我们需要什么需要一个特殊的指针指针生命周期结束时主动释放堆空间一片堆空间最多只能由一个指针标识杜绝指针运算和指针比较解决方案重载指针特征操作符(->和*)只能通过类的成员函数重载重载函数不能使用参数只能定义一个重载函数智能指针的创建和使用#include <iostream>using namespace st.
2021-11-09 14:48:40
98
原创 C++函数对象
函数对象使用具体的类对象取代函数该类的对象具备函数调用的行为构造函数指定具体数列项的起始位置多个对象相互独立的求解数列项解决方案函数调用操作符(())只能通过类的成员函数重载可以定义不同参数的多个重载函数#include <iostream>using namespace std;class Fib{ int a0; int a1;public: Fib() { a0 = 0; a1 =.
2021-11-09 14:48:02
101
原创 C++初始标准库
C++初始标准库标准函数库这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自C语言标准库的分类输入输出字符串和字符处理数学时间、日期和本地化动态分配宽字符函数面向对象类库这个库是类及其相关函数的集合面向对象类库标准的C++ I/O类String类数组类STL算法STL函数对象STL容器类STL迭代器STL分配器本地化库异常处理类杂项支持库标准库的简介C++标准库并不是C++语言的一部分C++标准库是由类库和函.
2021-11-09 14:47:28
132
原创 类中的函数重载
类中的函数重载函数重载函数重载的本质是相互独立的不同函数C++中通过函数名和函数参数确定函数调用无法直接通过函数名得到重载函数的入口地址函数重载必然发生在同一作用域中类中成员函数重载重载函数的本质为多个不同的函数函数名和参数列表是唯一标识函数重载必须发生在同一作用域中深度的意义重载的意义通过函数名对函数功能进行提示通过参数列表对函数用法进行提示扩展系统中已经存在的函数功能#include <stdio.h>#include <string.
2021-11-09 14:46:55
424
原创 友元的能力
友元的能力友元的概念什么是友元?是C++中的一种关系友元关系发生在函数与类之间或者类与类之间友元关系是单项的,不能传递的友元的用法在类中以friend关键字声明友元类的友元可以是其他类或者具体函数友元不是类的一部分友元不受类中访问级别的限制友元可以直接访问具体类的所有成员友元的语法在类中用friend关键字对函数或类进行声明#include <stdio.h>#include <math.h>class Point{ doub.
2021-11-09 14:46:25
92
原创 类的静态成员变量与函数
类的静态成员变量与函数静态成员变量静态成员变量属于整个类所有静态成员变量的生命周期不依赖于任何对象可以通过类名直接访问公有静态成员变量所有对象共享类的静态成员变量可以通过对象名访问公有静态成员变量静态成员变量的特性在定义时直接通过static关键字修饰静态成员变量需要在类外单独分配空间静态成员变量在程序内部位于全局数据区#include <stdio.h>class Test{ static int conut;public: Test(/.
2021-11-09 14:45:52
88
原创 对象的构造顺序、销毁、临时对象
对象的构造顺序、销毁、临时对象对象的构造顺序对于局部对象当程序执行流到达对象的定义语句时进行构造堆对象当程序执行流到达new语句时创建对象使用new创建对象将自动触发构造函数的调用对于全局对象对象的构造顺序是不正确的不同的编译器使用不同的规则确定构造顺序小结局部对象的构造顺序依赖于程序的执行流堆对象的构造顺序依赖于new的使用顺序全局对象的构造顺序是不确定的对象的销毁一般而言,需要销毁的对象都应该做清理解决方案为每个类都提供一个public的free函数.
2021-11-09 14:45:14
117
原创 初始化参数列表
初始化参数列表类成员的初始化C++中提供了初始化列表对成员变量进行初始化语法规则ClassName::ClassName() : m1(v1),m2(v1,v2){ }#include <stdio.h>class Test{private: const int i;public: Test():i(10) { } int getI(){ return i; }};int ma.
2021-11-09 14:44:38
1297
原创 对象的构造
对象的构造对象的初始化程序设计的角度,对象只是变量,因此:在栈上创建对象时,成员变量初始化为随机值在堆上创建对象时,成员变量初始化为随机值在静态存储区创建对象时,成员变量初始为0构造函数C++ 中可以定义与类名相同的特殊成员函数这种特殊的成员函数叫做构造函数构造没有任何返回类型的声明构造函数在对象定义时自动被调用带有参数的构造函数构造函数可以根据需要定义参数一个类中可以存在多个重载的构造函数构造函数的重载遵循C++重载的规则提示对象的声.
2021-11-09 14:43:56
73
原创 C++类的形态
类的形态类的关键字struct在C语言中已经有了自己的含义,必须继续兼容在C++中提供了新的关键字class用于类的定义class和struct用法完全相同class与struct的区别在用struct定义类,所有成员默认访问级别是public在用class定义类,所有成员默认访问级别是private类的真正形态C++中的类支持声明和实现的分离将类的实现和定义分开.h头文件中只有类的声明成员变量和成员函数的声明.cpp源文件中完成类的其他实现成员函数的具.
2021-11-08 13:40:47
139
原创 类与封装的概念
类与封装的概念类的封装类通常分为以下两个部分类的实现细节类的使用方式当使用类时,不需要关心其实现细节当创建类时,需要考虑其内部实现细节封装的概念根据经验:并不是类的每个属性都是对外公开的eg:女生不希望外人直到自己的年龄而一些类的属性是对外公开的eg:人的姓名,学历必须在类的表示法中定义属性和行为的公开级别eg:文件系统的文件权限C++中类的封装成员变量:C++中用于表示类属性的变量成员函数:C++中用于表示类行为的函数C++中.
2021-11-08 13:40:07
151
原创 C++面向对象
面向对象面向对象基本概念面向对象的意义将日常生活中习惯的思维方式引入程序设计中将需求中的概念直观映射到解决问题中以模块为中心构建可复用的软件系统提高软件产品的可维护性和可扩展性类和对象的基本概念类:指的是一类事物,是一个抽象的概念对象:指的是属于某个类的具体实体类是一种模型,这种模型可以创建出不同的对象实体对象实体是类模型的一个具体实例类和对象的意义类用于抽象的描述一类事物所持有的属性和行为对象是具体的事物,拥有所属类中描述的一切属性和行为类之间的基本关系继..
2021-11-08 13:39:31
126
原创 #新型类型转换
新型类型转换强制类型转换C方式的强制类型转换(Type)(Expression)Type(Expression)C方式强制类型转换存在的问题过于粗暴任意类型之间都可以进行转换,编译器很难判断其正确性难于定位在源码中无法快速定位所使用强制类型转换语句C++将强制类型转换分为4种不同类型static_castconst_castdynamic_castreinterpret_caststatic_cast强制类型转换用于基本类型间的转换.
2021-11-08 13:38:53
68
原创 C++中的新成员
C++中的新成员动态内存分配C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的delete关键字用于内存释放Type* pointer = new Type;delete pointer;Type* pointer = new Type[N];delete[] pointer;#include <stdio.h>int main(int argc, char const *argv[]){ int.
2021-11-08 13:38:14
85
原创 函数参数与重载
函数参数与重载函数参数函数参数的默认值C++中可以在函数声明时为参数提供一个默认值当函数调用时没有提供参数的值,则使用默认值参数的默认值必须在函数声明中指定函数参数的默认值参数的默认值必须从右向左提供函数调用时使用了默认值,则后续参数必须使用默认值函数占位参数在C++中可以为函数提供占位参数占位参数只有参数类型声明,而没有参数声明一般情况下,在函数体内部无法使用占位参数函数占位参数的意义占位参数与默认参数结合起来使用兼容C语言程序中可能出现的不规范写法.
2021-11-08 13:37:45
452
原创 C++内联函数
内联函数常量与宏C++中的const常量可以替代宏常数定义 const int A = 3 <---> #define A 3C++替换宏代码块使用内联函数C++中使用inline关键字声明内联函数inline int func(int a,int b){ return a<b ? a:b;}内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求内联函数C++编译器可以将一个函数进行内联编译被C++编译器内联编译的函
2021-11-08 13:36:46
120
原创 引用的本质分析
引用的本质分析引用的意义引用作为变量别名而存在,因此在一些场合可以代替指针引用相对于指针来说具有更好的可读性和实用性void swap(int& a,int& b){ int t = a; a = b; b = t;}特殊的引用const引用在C++中可以声明const引用const Type& name = varconst引用让变量拥有只读属性当使用常量对const引用进行初始化时,C++ 编译器会为常量值分配空间,并
2021-11-08 13:36:15
109
原创 进化后的const
进化后的constC语言中的constconst修饰的变量是只读的,本质还是变量const修饰的局部变量在栈上分配空间const修饰的全局变量在只读存储区分配空间const只在编译期有用,在运行期无用const修饰变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边C语言中的const使得变量具有只读属性const将具有全局生命周期的变量存储于只读存储区C++中的constC++在C的基础上对const进行了进化处理当碰见const声明时在符号表中进入常量
2021-11-08 13:35:30
75
原创 C语言函数与宏
函数函数与宏宏是由预处理器直接替换展开的,编译器不知道宏的存在函数是由编译器直接编译的实体,调用行为由编译器决定多次使用宏会导致最终执行程序的体积增大函数是跳转执行的,内存中只有一份函数体存在宏的效率高于函数,因为是直接展开,无调用开销函数调用时,会创建活动记录,效率不如宏宏的效率稍高,但是其副作用巨大宏是文本替换,参数无法进行类型检查可以使用函数完成的功能绝对不用宏宏的定义不能出现递归定义宏的妙用用于生成一些常规的代码封装函数,加上类型信息小结宏和函数并.
2021-11-08 13:34:28
130
原创 C语言函数小结
函数函数与宏宏是由预处理器直接替换展开的,编译器不知道宏的存在函数是由编译器直接编译的实体,调用行为由编译器决定多次使用宏会导致最终执行程序的体积增大函数是跳转执行的,内存中只有一份函数体存在宏的效率高于函数,因为是直接展开,无调用开销函数调用时,会创建活动记录,效率不如宏宏的效率稍高,但是其副作用巨大宏是文本替换,参数无法进行类型检查可以使用函数完成的功能绝对不用宏宏的定义不能出现递归定义宏的妙用用于生成一些常规的代码封装函数,加上类型信息小结宏和函数并.
2021-09-28 09:14:53
370
原创 C语言函数
函数函数的意义C语言的函数函数的由来 --> 程序 = 数据 + 算法 --> C程序 = 数据 + 函数模块化设计 --> 将复杂的问题转变为简单化问题面向过程的程序设计面向过程是一种以过程为中心的编程思想首先将复杂问题分解为一个个容易解决的问题分解过后的问题可以按照步骤一步步完成函数是面向过程在C语言中的体现解决问题的每个步骤可以用函数来实现声明与定义声明的意义在于告诉编译器程序单元的存在定义则明确指示程序单元的意义C语言中通过extern进.
2021-09-28 09:14:00
79
原创 程序内存分布
程序内存分布C语言中的程序存储区程序中的栈栈是现代计算机程序里最为重要的概念之一栈在程序中用于维护函数调用上下文函数中的参数和局部变量存储在栈上栈保存了一个函数调用所需的维护信息参数返回地址局部变量调用上下文····函数调用过程每次函数调用都对应着一个栈上的活动函数调用栈上的数据函数调用时,对应的栈空间在函数返回前是专用的函数调用结束后,栈空间被释放,数据不再有效程序中的堆堆是程序中一块预留的内存空间,可由程序自由使用堆中被程序申请使用的内存在被.
2021-09-28 09:11:48
129
原创 动态内存分析
动态内存分析动态内存分配的意义C语言中的一切操作都是基于内存的变量和数组都是内存的别名内存分配由编译器在编译期间决定定义数组的时候必须指定数组长度数组长度是在编译期就必须确定的malloc和freemalloc所分配的是一块连续的内存malloc以字节为单位,并且不带任何的类型信息free用于将动态内存归还系统注意:malloc和free是库函数,不是系统调用malloc实际分配的内存可能会比请求的多不能依赖于不同平台下的malloc行为当请求的动态内存无法.
2021-09-28 09:11:19
90
原创 函数与指针
函数与指针函数类型C语言中的函数有自己特定的类型函数的类型由返回值,参数类型和参数个数共同决定int add(int i ,int j) 的类型 int(int,int)C语言中通过typedef为函数类型重命名typedef type name(parameter list)//例子typedef int f(int,int);函数指针函数指针用于指向一个函数函数名是执行函数体的入口地址可通过函数类型定义函数指针:FuncType* pointer;也可以直接定义.
2021-09-28 09:10:47
80
fedora-everything-32
2020-10-08
ubuntu-server
2020-10-08
percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
2020-05-30
zabbix-agent-4.0.13-1.el7.x86_64.rpm
2020-05-30
webmin-1.941.tar.gz
2020-04-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人