![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
A-SIL
这个作者很懒,什么都没留下…
展开
-
C++继承1 公有继承
一、公有继承当继承方式为公有继承的时候,基类中不同的访问限定符下的数据成员和成员函数被继承到了派生类的不同的访问限定符下。二、代码演示用代码来验证上述的理论知识创建Person类,数据成员:Name,Age 成员函数:构造函数、析构函数、eat()创建Worker类,数据成员:Salary 成员函数:构造函数、析构函数、work()1、在公有继承方式下,基类的数据成员和...原创 2019-05-09 14:35:27 · 704 阅读 · 0 评论 -
C++ 多态5 异常处理
一、异常处理异常:程序运行期间出现的错误异常处理:对有可能发生的异常的地方做出预见性地安排关键字:try...catch... throw基本思想:主逻辑与异常处理分离常见的异常:数组下标越界、除数为0、内存不足注意 C程序中不支持try、catch及throw关键字throw 表达式表示抛出一个异常,异常是一个表达式,关注的是表达式值的类型 ,可以是基本...原创 2019-05-16 01:25:36 · 305 阅读 · 0 评论 -
C++ 常对象成员 常成员函数 对象的常指针、常引用
常数据成员一个类中的数据成员是可以被const修饰的,被称为常数据成员;常数据成员与普通数据成员初始化的方式并不相同假设有一个Coordinate(坐标)类,用const修饰他的数据成员class Coordinate{public: Coordinate(int x,int y) { m_iX=x;//这种初始化方式是错误的,表达式必须是可修改的...原创 2019-05-21 16:34:56 · 832 阅读 · 0 评论 -
C++ static 静态数据成员 静态成员函数
静态数据成员用static修饰类中的数据成员,被称为静态数据成员。他并不依赖于对象的实例化,而依赖于类。所以静态数据成员不在构造函数中初始化,它单独进行初始化;就算对象没有实例化,他也存在。而普通数据成员依赖于对象的实例化,若对象没有实例化,它就不存在。假设有一个Tank类class Tank{public: Tank(char code); ~Tank(); void f...原创 2019-05-21 19:13:11 · 252 阅读 · 0 评论 -
C++ 一元、二元运算符重载
运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,使他适应不同的数据类型。运算符重载的本质:函数重载 关键字:operator一、一元运算符重载一元运算符就是对一个数进行操作一元运算符重载利用成员函数进行重载时,就不用给()内传参数了,()内有隐藏的*this负号运算符的重载定义一个Coordinate坐标类,分别通过成员函数和友元函数对负号运算符进...原创 2019-05-22 16:26:29 · 1091 阅读 · 0 评论 -
C++ 引用
一、引用引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;eg:int a; int &b=a; //定义引用b,它是变量a的引用,即别名说明:(1)&在此不是求地址运算,而是起标识作用。(2)类型标识符是指目标变量的类型。(3)声明引用时,必须同时对...原创 2019-05-17 16:45:34 · 159 阅读 · 0 评论 -
C++ const用法 const与#define区别 内联函数
一、const(控制变化) C++const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。1、const与基本数据类型int x = 3;//变量const int x = 3;//常量2、const与指针类型例1:const int *p ...原创 2019-05-17 17:39:41 · 425 阅读 · 0 评论 -
虚拟地址空间
虚拟地址空间 大多数计算机使用8位的块,或者叫做字节(Byte),来作为最小的可寻址的存储器单元,而不是访问存储器中单独的位。 机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器。存储器的一个字节都由唯一的数字来标识,称为它的地址(虚拟地址)。所有可能虚拟地址的集合就称作虚拟地址空间。 ...原创 2019-07-19 02:53:28 · 606 阅读 · 0 评论 -
C/C++ 编译链接过程详解
目录一、预编译二、编译三、汇编ELF文件C语言中的强符号、弱符号objdumpreadelf四、链接五、运行程序的编译链接过程要把我们编写的一个c/c++程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终...原创 2019-07-22 01:23:46 · 2055 阅读 · 1 评论 -
智能指针
一、智能指针的引入我们知道,栈是系统开辟并且系统进行释放的,而堆是程序员手动开辟,手动释放的。那么如果程序员忘记手动释放就会造成内存泄露,或者由于程序逻辑运行出现异常,导致代码过早返回,没有执行到free或者delete。那么如何避免这种错误呢,所以引入了智能指针(手动开辟,系统回收)智能指针是怎么防止内存泄露的,如下代码:void func(){ shared_ptr&l...原创 2019-08-24 16:25:13 · 265 阅读 · 0 评论 -
STL标准模板库
一、包含了什么容器---容纳一组元素的对象迭代器---提供一种访问容器中每个元素的方法仿函数---一个行为类似函数的对象,调用它就像调用函数一样适配器---用来修饰容器 比如queue stack 底层借助了deque空间配置器---负责空间配置和管理 算法二、容器顺序容器:vector:向量容器。底层是动态开辟的一维数组,内存可...原创 2020-03-03 22:40:45 · 281 阅读 · 0 评论 -
C++ 多态4 RTTI
一、RTTIRTTI是Runtime Type Identification的缩写,意思是运行时类型识别。C++引入这个机制是为了让程序在运行时能根据基类的指针或引用来获得该指针或引用所指的对象的实际类型。但是现在RTTI的类型识别已经不限于此了,它还能通过typeid操作符识别出所有的基本类型(int,指针等)的变量对应的类型。C++通过以下的两个操作提供RTTI:(1)type...原创 2019-05-15 23:05:45 · 359 阅读 · 0 评论 -
C++ 多态3 纯虚函数 抽象类、接口类
一、概念纯虚函数没有函数体并且在定义的时候要在后面加个=0声明:virtual 函数类型 函数名 (参数表列) = 0;注意:(1)纯虚函数没有函数体;(2)最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”;(3)这是一个声明语句,最后有分号。纯虚函数只有函数的名字而不具备函数的功能,不能被调用。纯虚函数的作用是在基类中...原创 2019-05-15 20:52:57 · 285 阅读 · 0 评论 -
C++继承2 保护、私有继承
一、理论知识保护继承私有继承二、代码演示创建Person类,数据成员:Name,成员函数:构造 play()创建Soldier类,数据成员:Age,成员函数:构造 work()创建Infantry类,成员函数attack()1、如何证明,在保护继承的方式下,父类Person的public和protected访问限定符下的数据成员和成员函数被继承到了子类Soldi...原创 2019-05-09 15:49:55 · 229 阅读 · 0 评论 -
C++继承3 隐藏
一、隐藏隐藏是指派生类的函数屏蔽了与其同名的基类函数。这里有两种情况:1>子类函数名,参数列表,返回值类型与基类的完全一样,此时基类中被隐藏的函数不能有virtual修饰(否则就是覆盖)2>函数同名,但是参数列表不同,此时基类中被隐藏的函数有没有virtual修饰均可。隐藏特性的主要体现:当实例化B的对象的时候,该对象只能直接访问子类的aa(),而不能访问父类的aa...原创 2019-05-09 16:21:29 · 230 阅读 · 0 评论 -
C++继承4 Is a 基类的指针指向派生类的对象
一、关于基类与派生类之间赋值、初始化以及指针指向/*公有继承: Is a 1.Person类,数据成员:m_strName 成员函数:构造、析构、piay() 2.Soldier类,数据成员:m_iAge 成员函数:构造、析构、work()*/代码:Person.h#include<iostream>#include<string>...原创 2019-05-09 18:31:37 · 827 阅读 · 0 评论 -
C++继承5 多重继承、多继承
一、概念多重继承:当B类从A类派生,C类从B类派生,此时称为多重继承多继承:多继承是指一个子类继承多个父类。多继承对父类的个数没有限制,继承方式可以是公共继承、保护继承和私有继承。若不写继承方式,默认是private继承。二、代码演示多重继承#include<iostream>#include<string>using namespace ...原创 2019-05-09 20:18:09 · 444 阅读 · 0 评论 -
C++继承6 虚继承、菱形继承
一、菱形继承代码演示:创建: 1.Farmer类,数据成员:m_strName,成员函数:构造、析构、sow() 2.Worker类,数据成员:m_strCode,成员函数:构造、析构、carry() 3.MigrantWorker类,数据成员:无,成员函数:构造、析构 4.Person类,数据成员:...原创 2019-05-09 21:23:03 · 327 阅读 · 1 评论 -
C++多态1 动多态 虚函数 虚析构函数
一、多态1、定义:相同的对象收到不同的消息或者不同的对象收到相同的消息时,产生的不同的动作。2、静多态(早绑定):在编译之前就知道要用哪个函数3、动多态(晚绑定):是利用虚函数实现了运行时的多态,也就是说在系统编译的时候并不知道程序将要调用哪一个函数,只有在运行到这里的时候才能确定接下来会跳转到哪一个函数的栈帧。动多态的前提:以封装和继承为基础,至少两个类(父、子)面向对象三大...原创 2019-05-14 20:54:37 · 233 阅读 · 0 评论 -
C++多态2 虚函数表
一、虚函数表父类Shape 子类Circle父类 Shapevftable_ptr是一个虚表指针,它指向一个存放该类对象的所有虚函数的地址的表;虚函数表与Shape类的定义同时出现,虚函数表占有一定的空间;假设虚函数...原创 2019-05-14 23:21:33 · 222 阅读 · 0 评论 -
C++ 虚函数表剖析(转载)
关键词:虚函数,虚表,虚表指针,动态绑定,多态一、概述为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表每个包含了虚函数的类都包含一个虚表。我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚...转载 2019-05-15 13:59:39 · 130 阅读 · 0 评论 -
C++ this指针
一、this指针首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。this...原创 2019-05-20 21:39:48 · 265 阅读 · 0 评论 -
C++ 深拷贝浅拷贝
一、概念深拷贝:指的是拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。这样进行深拷贝后的拷贝对象就和源对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。浅拷贝:指的是拷贝一个对象时,仅仅拷贝对象的引用进行拷贝,但是拷贝对象和源对象还是引用同一份实体。此时,其中一个对象的改变都会影响到另一个对象。浅拷贝示例:#include<iost...原创 2019-05-21 01:50:32 · 326 阅读 · 0 评论 -
new和malloc的区别、ptmalloc
一、new和malloc的区别1、new/delete是C++的运算符/关键字,malloc与free是c++/c语言的标准函数void* malloc(size_t);void free(void*);void *operator new (size_t);void operator delete (void *);void *operator new[] (size_t);...原创 2019-08-15 16:57:42 · 380 阅读 · 0 评论