2021年7月20日

摘要: 1) 当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数; 2) 回调函数就相当于一个中断处理函数,由系统在符合你设定的条件时自动调用。为此,你需要做三 件事:1,声明;2,定义;3,设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为 一个参数,以便于系统调用; 3) 回调函数 阅读全文
posted @ 2021-07-20 23:37 超人不会灰啊 阅读(420) 评论(0) 推荐(0) 编辑
 
摘要: 1) 有时候类里面定义了很多int,char,struct等c语言里的那些类型的变量,我习惯在构造函数中将它们初 始化为0,但是一句句的写太麻烦,所以直接就memset(this, 0, sizeof *this);将整个对象的内存全部置 为0。对于这种情形可以很好的工作,但是下面几种情形是不可以这 阅读全文
posted @ 2021-07-20 23:36 超人不会灰啊 阅读(113) 评论(0) 推荐(0) 编辑
 
摘要: 程序运行过程入口点main函数,main()函数返回值类型必须是int,这样返回值才能传递给程序激活 者(如操作系统)表示程序正常退出。 main(int args, char **argv) 参数的传递。参数的处理,一般会调用getopt()函数处理,但实践 中,这仅仅是一部分,不会经常用到的技能 阅读全文
posted @ 2021-07-20 23:33 超人不会灰啊 阅读(113) 评论(0) 推荐(0) 编辑
 
摘要: 1) 为了阻止编译器默认生成拷贝构造函数和拷贝赋值函数,我们需要手动去重写这两个函数,某些情 况下,为了避免调用拷贝构造函数和拷贝赋值函数,我们需要将他们设置成private,防止被调用。 2) 类的成员函数和friend函数还是可以调用private函数,如果这个private函数只声明不定义,则 阅读全文
posted @ 2021-07-20 23:31 超人不会灰啊 阅读(317) 评论(0) 推荐(0) 编辑
 
摘要: 1) 将类定义为抽象基类或者将构造函数声明为private; 2) 不允许类外部创建类对象,只能在类内部创建对象 阅读全文
posted @ 2021-07-20 23:29 超人不会灰啊 阅读(207) 评论(0) 推荐(0) 编辑
 
摘要: 1) 构造函数,构造函数初始化对象,派生类必须知道基类函数干了什么,才能进行构造;当有虚函数 时,每一个类有一个虚表,每一个对象有一个虚表指针,虚表指针在构造函数中初始化; 2) 内联函数,内联函数表示在编译阶段进行函数体的替换操作,而虚函数意味着在运行期间进行类型确定,所以内联函数不能是虚函数; 阅读全文
posted @ 2021-07-20 23:27 超人不会灰啊 阅读(236) 评论(0) 推荐(0) 编辑
 
摘要: 1) 记录在成员初始化列表中的数据成员初始化操作会被放在构造函数的函数体内,并与成员的声明顺 序为顺序; 2) 如果一个成员并没有出现在成员初始化列表中,但它有一个默认构造函数,那么默认构造函数必须 被调用; 3) 如果class有虚表,那么它必须被设定初值; 4) 所有上一层的基类构造函数必须被调 阅读全文
posted @ 2021-07-20 23:22 超人不会灰啊 阅读(162) 评论(0) 推荐(0) 编辑
 
摘要: 1) 在派生类构造函数中,所有的虚基类及上一层基类的构造函数调用; 2) 对象的vptr被初始化; 3) 如果有成员初始化列表,将在构造函数体内扩展开来,这必须在vptr被设定之后才做; 4) 执行程序员所提供的代码; 阅读全文
posted @ 2021-07-20 23:21 超人不会灰啊 阅读(181) 评论(0) 推荐(1) 编辑
 
摘要: 1) 当初始化一个引用成员变量时; 2) 初始化一个const成员变量时; 3) 当调用一个基类的构造函数,而构造函数拥有一组参数时; 4) 当调用一个成员类的构造函数,而他拥有一组参数; 5) 编译器会一一操作初始化列表,以适当顺序在构造函数之内安插初始化操作,并且在任何显示用户 代码前。list 阅读全文
posted @ 2021-07-20 23:18 超人不会灰啊 阅读(207) 评论(0) 推荐(0) 编辑
 
摘要: 有三种情况会以一个对象的内容作为另一个对象的初值: 1) 对一个对象做显示的初始化操作,X xx = x; 2) 当对象被当做参数交给某个函数时; 3) 当函数传回一个类对象时; 1) 如果一个类没有拷贝构造函数,但是含有一个类类型的成员变量,该类型含有拷贝构造函数,此时 编译器会为该类合成一个拷贝 阅读全文
posted @ 2021-07-20 23:16 超人不会灰啊 阅读(128) 评论(0) 推荐(0) 编辑
 
摘要: 1) 如果一个类没有任何构造函数,但他含有一个成员对象,该成员对象含有默认构造函数,那么编译 器就为该类合成一个默认构造函数,因为不合成一个默认构造函数那么该成员对象的构造函数不能调 用; 2) 没有任何构造函数的类派生自一个带有默认构造函数的基类,那么需要为该派生类合成一个构造函 数,只有这样基类 阅读全文
posted @ 2021-07-20 23:12 超人不会灰啊 阅读(67) 评论(0) 推荐(0) 编辑
 
摘要: 1) 有时候我们会遇到这样一种情况,我们用对象a初始化对象b后对象a我们就不在使用了,但是对象a 的空间还在呀(在析构之前),既然拷贝构造函数,实际上就是把a对象的内容复制一份到b中,那么为 什么我们不能直接使用a的空间呢?这样就避免了新的空间的分配,大大降低了构造的成本。这就是移 动构造函数设计的 阅读全文
posted @ 2021-07-20 23:09 超人不会灰啊 阅读(67) 评论(0) 推荐(0) 编辑
 
摘要: 1) 类的非静态成员变量大小,静态成员不占据类的空间,成员函数也不占据类的空间大小; 2) 内存对齐另外分配的空间大小,类内的数据也是需要进行内存对齐操作的; 3) 虚函数的话,会在类对象插入vptr指针,加上指针大小; 4) 当该该类是某类的派生类,那么派生类继承的基类部分的数据成员也会存在在派生 阅读全文
posted @ 2021-07-20 23:00 超人不会灰啊 阅读(155) 评论(0) 推荐(0) 编辑
 
摘要: 1) 对象的静态类型:对象在声明时采用的类型。是在编译期确定的。 2) 对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态 类型无法更改。 3) 静态绑定:绑定的是对象的静态类型,某特性(比如函数依赖于对象的静态类型,发生在编译期。 4) 动态绑定:绑定的是对象的 阅读全文
posted @ 2021-07-20 22:59 超人不会灰啊 阅读(176) 评论(0) 推荐(0) 编辑
 
摘要: 当在类的非静态成员函数访问类的非静态成员时,编译器会自动将对象的地址传给作为隐含参数传递给函数,这个隐含参数就是this指针。 即使你并没有写this指针,编译器在链接时也会加上this的,对各成员的访问都是通过this的。 例如你建立了类的多个对象时,在调用类的成员函数时,你并不知道具体是哪个对象 阅读全文
posted @ 2021-07-20 22:53 超人不会灰啊 阅读(278) 评论(0) 推荐(0) 编辑
 
摘要: 1、static成员不属于任何类对象或类实例,所以即使给此函数加上virutal也是没有任何意义的。 2、静态与非静态成员函数之间有一个主要的区别,那就是静态成员函数没有this指针。 虚函数依靠vptr和vtable来处理。vptr是一个指针,在类的构造函数中创建生成,并且只能用this指针来 访 阅读全文
posted @ 2021-07-20 22:48 超人不会灰啊 阅读(319) 评论(0) 推荐(0) 编辑
 
摘要: 1) 使用引用参数的主要原因有两个: 程序员能修改调用函数中的数据对象 通过传递引用而不是整个数据–对象,可以提高程序的运行速度 2) 一般的原则: 对于使用引用的值而不做修改的函数: 如果数据对象很小,如内置数据类型或者小型结构,则按照值传递; 如果数据对象是数组,则使用指针(唯一的选择),并且指 阅读全文
posted @ 2021-07-20 22:47 超人不会灰啊 阅读(184) 评论(0) 推荐(0) 编辑
 
摘要: 1) C++空类的大小不为0,不同编译器设置不一样,vs设置为1; 2) C++标准指出,不允许一个对象(当然包括类对象)的大小为0,不同的对象不能具有相同的地址; 3) 带有虚函数的C++类大小不为1,因为每一个对象会有一个vptr指向虚函数表,具体大小根据指针大小确定; 4) C++中要求对于类 阅读全文
posted @ 2021-07-20 22:43 超人不会灰啊 阅读(169) 评论(0) 推荐(0) 编辑
 
摘要: 1) 拷贝构造函数的作用就是用来复制对象的,在使用这个对象的实例来初始化这个对象的一个新的实 例。 2) 参数传递过程到底发生了什么? 将地址传递和值传递统一起来,归根结底还是传递的是"值"(地址也是值,只不过通过它可以找到另一 个值)! i)值传递: 对于内置数据类型的传递时,直接赋值拷贝给形参( 阅读全文
posted @ 2021-07-20 22:37 超人不会灰啊 阅读(390) 评论(0) 推荐(0) 编辑
 
摘要: 1) string 是c++标准库里面其中一个,封装了对字符串的操作,实际操作过程我们可以用const char*给 string类初始化 a) string转const char*string s = “abc”;const char* c_s = s.c_str();b) const char* 阅读全文
posted @ 2021-07-20 22:16 超人不会灰啊 阅读(427) 评论(0) 推荐(0) 编辑