07 2020 档案

摘要:虚函数表指针位置分析 类:有虚函数,会产生一个虚函数表; 类对象:有一个指针,指针vptr会指向虚函数表的开始地址; 虚函数指针的位置 虚函数表位于整个对象模型的顶端; // objModel.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <ios 阅读全文
posted @ 2020-07-23 17:31 NaughtyCoder 阅读(209) 评论(0) 推荐(0)
摘要:并发和并行 并发:两个或多个事件在同一时间间隔内发生; 并行:两个或多个事件在同一时刻发生; 线程 线程是进程当中的一条执行流程。同一个进程内多个线程之间可以共享代码段、数据段、打开的文件等资源,但每个线程都有独立一套的寄存器和栈,这样可以确保线程的控制流是相对独立的。 优点: 一个进程中可以同时存 阅读全文
posted @ 2020-07-22 21:36 NaughtyCoder 阅读(248) 评论(0) 推荐(0)
摘要:继承的构造函数 一个类只继承其直接基类的构造函数,默认/拷贝/移动构造函数是不能被继承的; 继承Father的构造函数 using Father::Father; //继承Father的构造函数 using让某个名字在当前的作用域可见; //编译器遇到这条代码的时候,会把基类的每个构造函数都生成一个 阅读全文
posted @ 2020-07-22 11:13 NaughtyCoder 阅读(274) 评论(0) 推荐(0)
摘要:对象移动 C++11引入对象移动;进行所有权的转移; 移动构造函数和移动赋值运算符应该完成的功能 确保必要的内存移动,斩断原对象和内存的关系; 确保移动后原对象处于一种“即便被销毁也没有什么问题”的一种状态;A > B,确保不再使用A,而是应该去使用B; 移动构造函数 引入目的:提高程序效率; 说明 阅读全文
posted @ 2020-07-22 11:05 NaughtyCoder 阅读(289) 评论(0) 推荐(0)
摘要:临时对象 C++中真正的临时对象是不可见的,在源代码中不会出现,且不在堆上分配内存(在栈中),没有名字的对象; //i++ ++i //i++ 会产生一个临时对象,用来记录i的值; int i = 1; int &&r = i++; //i和r没关系 产生临时对象的情况 临时对象可能发生于如下的三种 阅读全文
posted @ 2020-07-21 08:33 NaughtyCoder 阅读(269) 评论(0) 推荐(0)
摘要:派生类对象模型 子类对象包含多个组成部分(也就是多个子对象); 含有派生类自己定义的成员变量、成员函数的子对象; 该派生类所继承的基类的子对象,这个子对象包含的是基类中定义的成员变量、成员函数(派生类对象含有基类对应的组成部分); 两部分数据在内存中的存储可能不连续; 基类指针可以new派生类对象, 阅读全文
posted @ 2020-07-21 08:00 NaughtyCoder 阅读(661) 评论(0) 推荐(0)
摘要:左值和右值 左值:能用在赋值语句等号左侧的东西;能够代表一个地址; 右值:不能作为左值的值就是右值,右值不能出现在赋值语句等号的左侧; 结论: C++的表达式,要么是左值,要么是右值,不能能两者都不是; 左值有的时候能够被当做右值使用; int i = 10; i = i + 1; //i是个左值, 阅读全文
posted @ 2020-07-20 23:49 NaughtyCoder 阅读(371) 评论(0) 推荐(1)
摘要:RTTI是什么 Run Time Type Identification:运行时类型识别;通过运行时类型识别,程序能够使用基类的指针或引用来检查这些指针或引用所指向的对象的实际派生类型。 Human *phuman = new Men; Human &q = *phuman; 主要是通过两个运算符来 阅读全文
posted @ 2020-07-20 23:44 NaughtyCoder 阅读(251) 评论(0) 推荐(0)
摘要:循环引用问题 “循环引用”简单来说就是:两个对象互相使用一个shared_ptr成员变量指向对方的会造成循环引用。导致引用计数失效。 即A内部有指向B,B内部有指向A,这样对于A,B必定是在A析构后B才析构,对于B,A必定是在B析构后才析构A,这就是循环引用问题,违反常规,导致内存泄露。 #incl 阅读全文
posted @ 2020-07-20 22:47 NaughtyCoder 阅读(581) 评论(0) 推荐(0)
摘要:weak_ptr weak_ptr概述: 用来辅助shared_ptr进行工作 week 弱 弱共享 弱引用 共享其他shared_ptr所指向的对象 强指针指的是 shared_ptr 弱指针指的是 weak_ptr weak_ptr 也是类模板,也是智能指针,这个智能指针用来指向一个shared 阅读全文
posted @ 2020-07-20 22:36 NaughtyCoder 阅读(142) 评论(0) 推荐(0)
摘要:友元函数 友元函数:通过将该函数声明为某个类的友元函数,它就能访问这个类的所有成员,包括:protected,private; 友元类 把其他类定义成当前类的友元类;那么其他类的成员函数可以访问当前类的成员函数和变量(private、protected); 注意:每个类负责自己的友元类; 友元关系不 阅读全文
posted @ 2020-07-20 10:48 NaughtyCoder 阅读(121) 评论(0) 推荐(0)
摘要:基类指针/派生类指针 基类指针可以new派生类对象,但是子类对象不能new基类指针; 基类指针new了子类对象,但是还是无法调用子类对象,需要借助虚函数; #include <iostream> using namespace std; class Human { public: Human(); 阅读全文
posted @ 2020-07-17 11:59 NaughtyCoder 阅读(152) 评论(0) 推荐(1)
摘要:派生类概念 类之间有层次关系; 父类(基类、超类);子类(派生类); 父类中定义一些公用的成员变量和成员函数;通过继承父类来构建子类; class 子类名:继承方式:父类 派生类对象定义时调用构造函数的顺序 当定义子类对象时候,父类和子类的构造函数都会被调用,而且,父类的构造函数的函数体先执行,子类 阅读全文
posted @ 2020-07-17 09:59 NaughtyCoder 阅读(159) 评论(0) 推荐(1)
摘要:重载运算符 本质上是一个函数,赋值运算符如果缺省,系统会自动生成一个;比较运算符不会; 格式: 返回类型 operator 运算符(参数列表) 拷贝赋值运算符 Time mytime; //调用无参构造函数 Time mytime2 = mytime; //定义初始化 调用了拷贝构造函数 mytim 阅读全文
posted @ 2020-07-16 21:21 NaughtyCoder 阅读(302) 评论(0) 推荐(0)
摘要:拷贝构造函数 默认情况下,类对象的拷贝是每个成员变量逐个拷贝; 含义:首先是一个类的构造函数,第一个参数是所属的类类型的引用,如果还有其他额外参数,那么这些额外参数必须都有默认值,函数默认参数必须放在函数声明,除非该函数没有函数声明; 作用:需要调用的时候,系统自动调用 建议: 拷贝构造函数第一个参 阅读全文
posted @ 2020-07-16 19:23 NaughtyCoder 阅读(166) 评论(0) 推荐(0)
摘要:类内初始化 c++11中,可以为类内成员变量提供一个初始值,在创建对象的时候,初始值就可以用来初始化该成员变量。在头文件中可以赋初值。 const成员变量的初始化 两种方式: 在头文件定义时赋初值进行初始化 在构造函数的初始化列表中进行初始化,不可以通过赋值来初始化 //类定义(类声明) class 阅读全文
posted @ 2020-07-16 19:16 NaughtyCoder 阅读(1320) 评论(0) 推荐(0)
摘要:类中实现成员函数(inline) 类内的成员函数实现其实也叫类内的成员函数定义,这种直接在类的定义中实现的成员函数,会被当做inline内联函数来处理。 成员函数末尾的const 含义: const: 常量,在成员函数的后面增加一个const,不但要在成员函数声明中增加const,也要在成员函数定义 阅读全文
posted @ 2020-07-16 19:14 NaughtyCoder 阅读(240) 评论(0) 推荐(0)
摘要:构造函数 构造函数的定义 在类中,有一种特殊的成员函数,它的名字和类名相同,我们在创建类的对象的时候,这个特殊的成员函数就会被系统自动调用,这个成员函数,就叫“构造函数”。因为构造函数会被系统自动调用,所以我们可以简单的理解成 构造函数的目的就是初始化类对象的数据成员; 构造函数 构造函数没有返回值 阅读全文
posted @ 2020-07-16 19:09 NaughtyCoder 阅读(387) 评论(0) 推荐(0)
摘要:类 类是我们自己定义的数据类型(新类型),设计类时要考虑的角度 1)站在设计和实现者的角度来考虑 2)站在使用者的角度来考虑 3)父类、子类; 类基础 一个类就是一个用户自己定义的数据类型,我们可以把类想象成一个命名空间,包着一堆东西(成员函数和成员变量) 一个类的构成:成员变量,成员函数(有很多特 阅读全文
posted @ 2020-07-16 17:46 NaughtyCoder 阅读(111) 评论(0) 推荐(0)
摘要:static_cast 完全替代C风格的类型转换,实现基本类型转换 对象指针转换时,可以将父类指针转换成子类指针,也可以将子类指针转换成父类指针;如果类与类之间不相关,就无法相互转换; 注意:如果父类指针指向一个父类对象,此时将父类指针换成子类指针虽然可以通过static_cast实现,但是这种转换 阅读全文
posted @ 2020-07-15 08:58 NaughtyCoder 阅读(157) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2020-07-14 17:13 NaughtyCoder 阅读(3) 评论(0) 推荐(0)
摘要:指针和数组 #include <iostream> using namespace std; void equal(char str7[], char str8[]) { printf("%d\n", str7 == str8); } int main() { char str1[6] = "hel 阅读全文
posted @ 2020-07-14 16:43 NaughtyCoder 阅读(106) 评论(0) 推荐(0)