![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++转载
You图碧
努力学习
展开
-
3-11 基类与派生类关系的详细再探讨
目录3-11 基类与派生类关系的详细再探讨派生类向基类的自动类型转换c++ 派生类向基类转换的可访问性3-11 基类与派生类关系的详细再探讨派生类对象模型简述:派生类有多个部分组成1、一个是含有派生类自己定义的成员变量,成员函数的子对象。2、一个是派生类继承的基类的子对象,因为派生类含有基类部分,所以我们可以把派生类对象当成基类对象来用(派生类成员与基类成员不一定存放在同一块连续的内存中)。基类指针可以new派生类对象,是因为派生类对象含有基类部分,所以我们可以把派生类对象原创 2020-05-10 00:45:14 · 295 阅读 · 0 评论 -
3-9 友元函数、友元类、友元成员函数
转自:https://www.cnblogs.com/XYQ-208910/p/4912261.html友元函数 :既可以是不属于任何类的非成员函数,也可以是另一个类的成员函数,统称为友元函数。友元函数不是当前类的成员函数,而是独立于类的外部函数,但它可以访问该类所有的成员,包括私有成员、保护成员和公有成员。在类中声明友元函数时,需在其函数名前加上关键字friend,此声明可以放在公有部分...原创 2019-09-20 23:15:03 · 590 阅读 · 0 评论 -
3-7 派生类、调用顺序、访问等级、函数遮蔽
3-7 派生类、调用顺序、访问等级、函数遮蔽一、派生类的概念类之间有一种层次关系,有父亲类,有孩子类。车这个类,当成父类(也叫基类、超类),派生出卡车、轿车,他们属于孩子类(子类、派生类)继承:有父亲类,有孩子类,构成了层次关系。继承这种概念,是咱们面向对象程序设计的核心思想之一。我们通过继承父类来构建新的类:子类;所以,我们只需要写和子类相关的一些内容即可。子...原创 2020-05-08 03:21:47 · 186 阅读 · 0 评论 -
3-4 类内初始化、默认构造函数、=default
3-4 类内初始化、默认构造函数、=default类内相关非成员函数可以直接放在类得声明与定义文件中。class Time{public: int Hour{ 1 };};void func(Time &mytime);类内初始化在C++11,我么可以为类内成员变量提供一个初始值,则我们在创建对象的时候,这个初始值就用来初始化该成员变量。...原创 2020-05-01 03:51:05 · 473 阅读 · 0 评论 -
2-5 结构、权限修饰符、类简介
一、结构体结构体:自定义的数据类型struct student{public: // 结构成员缺省都默认为public,所以可以不加public//private: // 私有的// 成员变量 int number; // 学号 char name[100]; // 学生名 void func() // 成员函数 { numbe...原创 2020-04-30 00:59:56 · 178 阅读 · 0 评论 -
2-4 范围for(c++11)、new内存动态分配(无)
范围for循环1.基于范围的for循环for(元素类型 元素对象:容器对象){ 循环体}(1.1)如果循环体由单条语句或者单个结构块组成,可以省略花括号(1.2)用元素对象依次结合容器对象中的每一个元素,每结合一个元素,执行依次循环体,直至容器内的所有元素都被结合完为止.(1.3)不依赖于下标元素,通用(1.4)不需要访问迭代器,透明(1.5)不需要定义处理...原创 2020-04-30 00:01:32 · 330 阅读 · 0 评论 -
2-3 命名空间、基本输入输出精解
命名空间一、为什么使用命名空间名称空间(namespace)被设计来克服这个困难,并被用作额外的信息来区分类似的函数、类、变量等等,它们在不同的库中具有相同的名称。使用名称空间,您可以定义定义名称的上下文。本质上,名称空间定义了一个范围。二、命名空间的定义在C语言中只有一个全局作用域:1.C语言中所有的全局标识符共享一个作用域2.标识符之间可能发生冲突C++中提出...原创 2020-04-29 22:23:26 · 270 阅读 · 0 评论 -
2-2 auto(c++11)、头文件防卫、引用(底层实现)、常量(const、 constexpr(c++11)、nullptr(c++11))
目录auto(c++11)防卫式声明引用C以及C++在const的区别,以及const在C++的增强nullptr与constexpr(c++11)auto(c++11)在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量。int a =10 ; //拥有自动生命期auto int b = 20 ;//拥有自动生命期st...原创 2020-04-29 19:49:44 · 2564 阅读 · 0 评论 -
c++的while(cin>>ch)如何退出 & while(cin)问题
目录1.c++的while(cin>>ch)如何退出2.while(cin)问题1.c++的while(cin>>ch)如何退出方法:回车后,在新行Ctrl+z并回车。若输入数据后Ctrl+z再回车无效。原因:输入缓冲是行缓冲。当从键盘上输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储。每当按下回车键后,cin.get() ...转载 2019-10-27 14:03:32 · 5101 阅读 · 0 评论 -
7.5 重载全局operator new和operator delete操作符、定位new(placement new)及多种版本operator new重载
一:重载全局operator new和operator delete函数 重载全局operator new[]和operator delete[]函数测试代码:这里看看写法就行,主要还是看侯捷老师的视频。注意:size_t size 这里自动推断对象A的大小,并将其输入。void *operator new(size_t size){ return mal...原创 2019-10-12 01:28:55 · 219 阅读 · 0 评论 -
3-14 c++11 对象移动、移动构造函数、移动赋值运算符,c++11 的 noexcept
一、对象移动的概念C++11新标准中一个最主要的特性就是提供了移动而非拷贝对象的能力。如此做的好处就是,在某些情况下,对象拷贝后就立即被销毁了,此时如果移动而非拷贝对象会大幅提升性能。二、右值引用为了支持移动操作,C++11引入了一种新的引用类型——右值引用(rvalue reference)。所谓的右值引用指的是必须绑定到右值的引用。使用&&来获取右值引用。...原创 2019-05-02 02:40:50 · 704 阅读 · 0 评论 -
2-6 函数新特性、内联函数inline、const详解
转自:https://www.cnblogs.com/chenwx-jay/p/inline_cpp.html选自:https://blog.csdn.net/lengxinxuexic/article/details/79741625还可以看一下:内联函数的意义和使用 https://blog.csdn.net/yellow_hill/article/details/72017...原创 2019-04-27 21:52:07 · 801 阅读 · 0 评论 -
1.8 类型转换(隐式,static_cast,dynamic_cast,const_cast,reinterpret_cast)
一、隐式类型转换系统自动进行,不需要程序开发人员介入。int m = 3 + 45.6;// 48 把小数部分截掉,也属于隐式类型转换的一部分double b = 3 + 45.6; // 48.6二、显示类型转换(强制类型转换)int key = 5 % 3.2; // 语法错误int k = 5 % (int)3.2; // 强制转换为3,C语言风格的类型转换in...转载 2019-04-27 22:25:58 · 163 阅读 · 0 评论 -
3-2 构造函数详解,explicit,初始化列表
转自:https://www.cnblogs.com/hs-pingfan/p/10453169.html构造函数详解,explicit,初始化列表一、构造函数在类中有一种特殊的成员函数,它的名字与类名相同,我们在创建类的时候,这个特殊的成员函数就会被系统调用。这个成员函数,就叫“构造函数”。因为构造函数会被系统自动调动,构造函数的目的就是初始化类对象的数据成员。(1)构造函数...原创 2019-04-27 22:41:54 · 195 阅读 · 4 评论 -
3-3 inline、(常量成员函数)成员函数末尾的const、mutable、this、static
可以再看看:https://www.cnblogs.com/xkfz007/articles/2419540.html转自:https://www.cnblogs.com/hs-pingfan/p/10476447.html一、在类定义中实现成员函数inline类内的成员函实现其实也叫作类内的成员函数定义。这种直接在类的定义中实现的函数,会被当做inli...原创 2019-04-28 00:25:29 · 186 阅读 · 0 评论 -
3-5 拷贝构造函数
拷贝构造函数默认情况下,类对象的拷贝时每个成员变量的逐个拷贝。如果一个类的构造函数的第一个参数是所属的类类型的引用,如果还有其他额外参数,那么这些额外的参数还都有默认值,则这个构造函数称为拷贝构造函数。函数默认参数必须放在函数声明中,除非该函数没有函数声明。(1)拷贝函数第一个参数总是带着const(2)explicit:拷贝构造函数一般不要声明为explicit成员函数逐...原创 2019-04-28 13:08:55 · 143 阅读 · 0 评论 -
2-9 迭代器,失效分析及弥补、实战
转自:https://www.cnblogs.com/hs-pingfan/p/10433425.html一、迭代器简介迭代器是一种遍历容器内元素的数据类型。这种数据类型感觉有点像指针。string,vector,[],很少用[],更通用的方式就是用迭代器。通过迭代器,我们可以读容器中的元素值,读string中的每个字符,还可以修改某个迭代器所指向的元素值。迭代器支持++,--...原创 2019-04-28 13:13:57 · 127 阅读 · 0 评论 -
3-8 基类指针、虚函数 override、final 、虚纯虚函数、多态性、虚析构
转自:https://www.cnblogs.com/hs-pingfan/p/10486316.html基类指针、虚函数、多态性、纯虚函数、虚析构虚函数:https://blog.csdn.net/samkieth/article/details/49737757C++为什么要用虚函数:https://blog.csdn.net/noricky/article/details/...原创 2019-04-28 13:18:41 · 154 阅读 · 0 评论 -
3-10 RTTI、dynamic_cast、typeid、type_info,虚函数表
转自:https://blog.csdn.net/INGNIGHT/article/details/99704360一、RTTIRTTI(Run-Time Type Identification),通过运行时类型信息,程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。Human* phuman = new Man;Human &a = *phum...原创 2019-04-28 15:35:36 · 300 阅读 · 0 评论 -
c++:虚函数表(转载)
转自:https://blog.csdn.net/lihao21/article/details/50688337class A {public: virtual void vfunc1(); virtual void vfunc2(); void func1(); void func2();private: int m...转载 2019-04-28 15:39:26 · 123 阅读 · 0 评论 -
3-12 左值,右值,左值引用,右值引用&&(c++11),move(c++11)std::forward()
原文链接:https://blog.csdn.net/qq_40794602/article/details/97818733一:左值、右值左值:能用在赋值等号的左侧的东西,能代表一个地址,必须有地址,左值必须要在内存中有实体;右值:不能出现在赋值语句的左侧。右值可以在内存也可以在CPU寄存器。一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。在...原创 2019-04-28 17:20:32 · 127 阅读 · 0 评论 -
3-13 临时对象深入探讨、 类外运算符重载
转自:https://blog.csdn.net/qq_32285693/article/details/89050343一、临时对象的概念 // i++,++i int i = 1; int &&r1 = i++; // 右值引用 r1和i之间没有什么关系 r1 = 19; i = 80; 另外一些临时对象,是因为...原创 2019-04-29 02:14:29 · 180 阅读 · 0 评论 -
3-16 类型转换构造函数、explicit、运算符,类成员指针
我们需要通过转换构造函数,和 类型转换符 来做到类型转换一:类型转换构造函数,比如,他们能够把一个数字,转换成一个 类对象构造函数种类:常规不带参数的(默认构造函数),或者一个。。参数 拷贝构造函数,移动构造函数 特殊。a)以类名作为函数名b)没有返回值类型转换构造函数:它可以将某个其他数据类型转换成该...原创 2019-05-10 01:17:23 · 329 阅读 · 0 评论 -
8-1STL总述
概念1.c++标准库:c++standard library2.标准模板库:standard template library标准模板库包含于c++标准库,是其主要部分。3.泛型编程:Generic Programing 使用模板为主要的编写方式《c++标准库》 《STL源码剖析》算法和数据结构谈《算法导论》标准模板库的组成部分容器vector迭代器算法...原创 2019-10-03 02:30:27 · 102 阅读 · 0 评论 -
6.1c++多线程概述
1、并发、线程、进程的概念1.1并发两个或者多个任务(独立的活动)同时发生:一个程序同时执行多个独立的任务;单核CPU的计算机在某一个时刻只能执行一个任务,由操作系统调度,进行多次的“任务切换”,产生并发的假象(不是真正的并发);这种切换是要有时间开销的,比如操作系统要保存切换时的各种状、执行进度等信息,切换回来时要复原这些信息。随着硬件的发展,出现了多处理器计算机(用于服务器和高性能...转载 2019-05-18 21:57:30 · 210 阅读 · 0 评论 -
9-1函数调用运算符()、不同调用对象的相同调用形式、可调用对象、 标准库function(c++11)
函数调用运算符 () 如果在类中 重载了函数调用运算符(),那么就可以像使用函数一样使用类了 使用: a)定义一个该类的对象 b)像函数调用一样使用该对象,也就是()中增加实参列表#include <iostream>using namespace std;class A{public: A(int) { ...原创 2019-10-05 21:16:35 · 604 阅读 · 0 评论 -
9-2万能引用universal reference
一:基本区别//void func(const int &abc) {} //abc的类型:const int &template<typename>void func(const T& abc) {} //abc的类型:需要推导的func(10); //T是什么类型:从10推出来的 ,不仅取决于10 ...原创 2019-10-06 00:15:33 · 224 阅读 · 0 评论 -
3.15:C++11继承构造函数 多重继承
继承的构造函数https://blog.csdn.net/qq_40794602/article/details/98437671https://blog.csdn.net/craftsman1970/article/details/82971774https://blog.csdn.net/qq_32285693/article/details/89197799详情转载:http...转载 2019-05-08 00:45:03 · 1453 阅读 · 0 评论 -
3-15 继承的构造函数、多重继承、虚继承(虚派生)
#include <iostream>using namespace std;class Grand{public: Grand(int i) :m_valuegrand(i) { cout << "调用了Grand构造函数"<< endl; } virtual ~Grand() { cout << "调用了...原创 2019-05-08 01:52:26 · 373 阅读 · 0 评论 -
4-1 模板概念,函数模板定义、调用、非类型模板参数
转自:https://www.cnblogs.com/lifexy/p/8761325.html函数模板当我们想写个Swap()交换函数时,通常这样写:void Swap(int& a, int& b){ int c = a; a = b; b = c;}但是这个函数仅仅只能支持int类型,如果我们想实现交换double,float...原创 2019-05-11 01:02:35 · 485 阅读 · 0 评论 -
4-2类模板概念,定义、类模板的成员函数、非类型模板参数
类模板用类模板来实例化一个特定的类编译器不能推断模板参数的类型,所以必须模板名后用<>头文件:#ifndef MYVECTOR_HPP_INCLUDED#define MYVECTOR_HPP_INCLUDEDtemplate <typename T>class myvector{public: typedef T* myitra...原创 2019-05-11 04:11:04 · 507 阅读 · 0 评论 -
5-1直接内存管理 new、delete、观察内存泄露。值初始化
直接内存管理new、deletenew分配的方式是动态分配(分配在堆上),直接内存管理初始化问题:int *pointe = new int ;//初值未定义string *mystr = new string ;//空字符串,调用了默认构造函数int *pointi = new int(100);//给了初值的。string *mystring2 = new strin...原创 2019-05-16 01:57:44 · 185 阅读 · 0 评论 -
4-3typename使用场合,函数指针做其他函数的参数,函数模板和可调用对象(C++11标准可以为函数模板提供默认参数)
转自:https://www.jianshu.com/p/bcbbf60081fe一、typename的使用场合typename的使用场合1、在模板定义里,表明其后的模板参数是类型参数// 函数模板// typename后边跟的是一个类型template<typename T, int a, int b> int funcaddv2(T c){ ......转载 2019-05-12 01:16:05 · 496 阅读 · 0 评论 -
4-4普通类的成员函数模板、类模板的成员函数模板、(c++11)模板显式实例化,模板声明
普通类的成员函数模板#include <iostream>#include "myvector.hpp"#include "test.h"using namespace std;class A{public: template<typename T> void myft(T temp) //成员函数模板 { ...原创 2019-05-12 20:12:39 · 3622 阅读 · 0 评论 -
5.2c++:new、delete探秘,智能指针概述,shared_ptr基础部分、make_shared函数
new、delete探秘new、delete是一个关键字,就像sizeof。不是个函数new、delete 比 malloc 和free干的事情多。new 和 delete 具备对 堆上所分配内存进行初始化、释放(反初始化)的能力,而这些是mallloc和free不具备的#include <iostream>#include <vector>usi...转载 2019-05-16 18:39:18 · 611 阅读 · 0 评论 -
5.3c++:shared_ptr的常用操作、计数、自定义删除器等(转载)
shared_ptr 引用计数的增加和减少共享式:引用计数,每一个 shared_ptr的拷贝都指向相同的内存(对象),只有最后一个指向该对象的shared_ptr指针不需要再指向该对象的时候,才会析构对象。1.1引用计数的增加每个shared_ptr都会记录有多少个其他的shared_ptr指向相同的对象auto p6 = make_shared<int> ...转载 2019-05-17 00:57:46 · 3565 阅读 · 0 评论 -
4-5using定义模板别名 (模板别名 c++11),显示指定模板参数
using定义模板别名#include <iostream>#include <vector>#include <string>#include <map>using namespace std; //c++98 :实现任意val的键值对 //using 定义模板类名 //type:一般定义类型别名 /...原创 2019-05-12 22:06:02 · 373 阅读 · 0 评论 -
4-6类和函数的模板全特化、偏特化(局部特化)
特化:相反的是 泛化:模板,可以随便指定类型特化:对特殊的类型(类型模板参数)进行特殊的对待。类模板特化1.类模板全特化常规全特化必须先有泛化版本才能存在特化版本。只要设计特化,就一定存在泛化特化版本代码编译器会优先选择#include <iostream>#include <string>using namespace std;...原创 2019-05-13 15:32:31 · 731 阅读 · 0 评论 -
7.1new 和 delete再了解7.2new细节探秘,重载类operator new delete
1.new内存分配细节探秘我们注意到,一块内存的回收,影响范围很广,远远不是10个字节,而是一大片。分配内存这个事,绝不是简单的分配出去4个字节,而是在这4个字节周围,编译器做了很多处理,比如记录分配出去的字节数等等;分配内存时,为了记录和管理分配出去的内存,额外多分配了不少内存,造成了浪费;尤其是你频繁的申请小块内存时,造成的浪费更明显,更严重,new ,delete(malloc,fr...原创 2019-10-10 22:24:14 · 170 阅读 · 0 评论 -
7.3内存池概念、代码实现和详细分析
1.内存池的概念和实现原理概述 malloc:内存浪费,频繁分配小块内存,则浪费更加显得明显 “内存池”,要解决什么问题? (1)减少malloc的次数,减少malloc()调用次数就意味着减少对内存的浪费 (2)减少malloc的调用次数,是否能够提高程序运行效率? 会有一些速度和效率上的提升,但是提升不明显; “内存池的实现原理”: (1)用m...原创 2019-10-11 00:30:44 · 253 阅读 · 0 评论