11 2019 档案

摘要:1.子类和父类中的同名成员变量 === a.子类可以定义父类中的同名成员 b.子类中的成员将隐藏父类中的同名成员(同名覆盖) c.父类中的同名成员依然存在于子类中 d.可以通过 作用域分辨符(::) 访问父类中的同名成员 eg: Child c; c.mi = 100; // 子类中的 mi c.P 阅读全文
posted @ 2019-11-28 16:35 人民广场的二道贩子 阅读(161) 评论(0) 推荐(0)
摘要:1.子类对象的构造 === a.子类中可以定义构造函数 b.子类构造函数 必须对继承而来的成员进行初始化 1).直接通过初始化列表或者赋值进行初始化 2).调用父类构造函数进行初始化 1).直接通过初始化列表或者赋值进行初始化 不可行,子类无法访问父类中的private成员。所以对这部分成员无法初始 阅读全文
posted @ 2019-11-28 15:25 人民广场的二道贩子 阅读(169) 评论(0) 推荐(0)
摘要:1.private public protected class类中存在private public两者类型 private不能被外界访问,包括子类。而子类继承父类,理论上可以访问父类的所有属性。 此时protected的引入使此部分成员只能被自身和子类访问 2.不同的继承方式 c++中支持三种不同 阅读全文
posted @ 2019-11-26 14:37 人民广场的二道贩子 阅读(163) 评论(0) 推荐(0)
摘要:1.问题:子类能访问父类中的私有成员吗? === 子类在父类的外界,所以子类不能直接访问父类的私有成员。但是子类的定义中说子类拥有父类的一切属性和行为,怎么使子类访问父类的私有成员呢?这里就涉及到protected的使用了。 2.继承中的访问级别 === a.面向对象中的访问级别不只是public和 阅读全文
posted @ 2019-11-26 14:02 人民广场的二道贩子 阅读(125) 评论(0) 推荐(0)
摘要:1.组合关系 === 组合关系的特点 a.将其它类的对象作为当前类的成员使用 b.当前类的对象与成员对象的生命周期相同 c.成员对象在用法上与普通对象完全一致 eg: include include using namespace std; class Memory { public: Memory 阅读全文
posted @ 2019-11-26 13:21 人民广场的二道贩子 阅读(141) 评论(0) 推荐(0)
摘要:1.类型转换函数(类类型 普通类型) === a.类型转换函数用于将类对象转换为其他类型 语法规则:(重载) operator Type () { Type ret; //... return ret; } b.类型转换函数 1).与转换构造函数具有同等的地位 2).是的便与其有能力将对象转化为其他 阅读全文
posted @ 2019-11-26 11:08 人民广场的二道贩子 阅读(137) 评论(0) 推荐(0)
摘要:1.再论类型转换 === a.标准数据类型之间会进行隐士类型安全转换 b.转换规则 问题1: eg: include include using namespace std; int main() { unsigned int ui = 1000; int i = 2000; cout == 100 阅读全文
posted @ 2019-11-23 16:19 人民广场的二道贩子 阅读(152) 评论(0) 推荐(0)
摘要:前置操作符: ++i; i; 后置操作符: i++; i ; 1.i++和++i和区别? === 下面的代码有没有区别?为什么? i++; ++i; //注:与j = i++; 有区别 在工程中,独立的这两行语句是完全一样的没有差异(从汇编代码去看)。原因是,编译器的优化,这样做更高效。 对于基础类 阅读全文
posted @ 2019-11-23 11:14 人民广场的二道贩子 阅读(235) 评论(0) 推荐(0)
摘要:1.逗号操作符 === a.逗号表达式用于将多个子表达式连接为一个表达式 b.逗号表达式的值为最后一个子表达式的值 c.逗号表达式中的前N 1个子表达式没有返回值 d.逗号表达式按照从左到右的顺序计算每个表达式的值 eg: include include using namespace std; v 阅读全文
posted @ 2019-11-23 09:55 人民广场的二道贩子 阅读(160) 评论(0) 推荐(0)
摘要:eg: include include using namespace std; class Test { int mValue; public: Test (int v) { mValue = v; } int value() const //因为重载的逻辑操作符的参数是const对象。const 阅读全文
posted @ 2019-11-21 10:35 人民广场的二道贩子 阅读(160) 评论(0) 推荐(0)
摘要:1.智能指针(即一个功能完善的类) === a.指针生命周期结束时主动释放堆空间 b.一片堆空间最多只能由一个指针标识 c.杜绝指针运算和指针比较 解决方案: a.重载指针特征操作符(" "和" ") b.只能通过成员对象重载(=, [], ()) c.重载函数不能使用参数 d.只能定义一个重载函数 阅读全文
posted @ 2019-11-20 17:02 人民广场的二道贩子 阅读(178) 评论(0) 推荐(0)
摘要:1.需要进行深拷贝的时候必须重载赋值操作 === 重载赋值操作必然需要实现深拷贝 include include using namespace std; class Test { int m_pointer; public: Test () { m_pointer == NULL; } Test 阅读全文
posted @ 2019-11-20 15:41 人民广场的二道贩子 阅读(163) 评论(0) 推荐(0)
摘要:1.编写一个函数 === a.函数可以获得斐波那契数列 b.每调一次返回一个值 c.函数可以根据需要重复使用 2.函数数对象 === a.使用具体的类对象取代函数 b.改类的对象具备函数调用的行为 c.构造函数指具体数列的起始位置 d.多个对象相互独立的求解数列项 函数调用操作符("()") a.只 阅读全文
posted @ 2019-11-19 14:58 人民广场的二道贩子 阅读(142) 评论(0) 推荐(0)
摘要:1.问题: string类 对象还具备c方式字符串的灵活性吗?还能直接访问单个字符吗? === 答案:可以按照c字符串的方式使用string对象 string s = "a1b2c3d4e"; int n = 0; for(int i = 0; i include using namespace s 阅读全文
posted @ 2019-11-19 14:23 人民广场的二道贩子 阅读(176) 评论(0) 推荐(0)
摘要:1.标准库中的字符串类 === c++语言中 没有 原生的 字符串类型 c++标准库提供了 string类 ,定义后就像使用普通变量一样使用 a.string直接支持字符串连接 ("+") b.string直接支持字符串的大小比较 (" ", " include using namespace st 阅读全文
posted @ 2019-11-19 10:33 人民广场的二道贩子 阅读(152) 评论(0) 推荐(0)
摘要:1.c++标准库 === a.c++标准库并不是c++语言的一部分 b.c++标准库是有类库和函数库组成的集合 c.c++标准库中定义的类和对象都位于 std 命名空间 d.c++标准库的头文件都不带 .h 后缀 e.c++标注库涵盖了c库的功能 eg: include //c++的标准库 incl 阅读全文
posted @ 2019-11-16 10:09 人民广场的二道贩子 阅读(103) 评论(0) 推荐(0)
摘要:利用操作符重载的练习 === 注意事项: 1.赋值操作符(=)只能重载为成员函数 2.操作符重载不能改变原操作符的优先级(+, , , /) 3.操作符重载不能改变操作符的个数 4.操作符重载不应改变操作符的原有语义(3,4说明操作符重载只是对原有操作符功能的扩展,但是不能改变其本质的含义。比如:+ 阅读全文
posted @ 2019-11-16 09:43 人民广场的二道贩子 阅读(133) 评论(0) 推荐(0)
摘要:问题: + 操作符不能支持复数相加 解决方案: c++中的重载能够扩展操作符的功能 1.操作符重载 === a.通过 operator 关键字可以定义特殊的函数 b.operator的本质是通过函数重载操作符 语法: Type operator Sign(const Type p1, const T 阅读全文
posted @ 2019-11-15 15:27 人民广场的二道贩子 阅读(141) 评论(0) 推荐(0)
摘要:函数的重载必然发生在同一作用域中 === 全局函数,普通成员函数,静态成员函数三个函数与各自的同类型函数可以重载(同一作用域) 1.全局函数,普通成员函数以及静态成员函数之间是否可以构成重载? === 因普通成员函数和静态成员函数可以作用于同一个类中(同一作用域)所以,他们可以重载;而全局函数和他们 阅读全文
posted @ 2019-11-14 16:17 人民广场的二道贩子 阅读(133) 评论(0) 推荐(0)
摘要:1.友元的概念 === a.友元是c++中的一种关系 b.友元关系发生在 函数与类 之间或者 类与类 之间 c.友元关系是单项的,不能传递(充分不必要) 2.友元的用法 === a.在类中以friend关键字声明友元 b.类的友元可以是其它类或具体函数 c.友元不是类的一部分(函数,是外界的。类就不 阅读全文
posted @ 2019-11-14 15:41 人民广场的二道贩子 阅读(110) 评论(0) 推荐(0)
摘要:1.构造函数遇到的问题 === a.构造函数只提供自动初始化成员变量的机会 b.不能保证初始化逻辑一定成功(涉及到内存容易出错) c.执行return语句后构造函数立即结束 注:构造函数能决定的只是对象的初始状态,而不是对象的诞生 2.半成品对象 === 半成品对象:初始化操作不能按照预期完成而得到 阅读全文
posted @ 2019-11-14 10:28 人民广场的二道贩子 阅读(99) 评论(0) 推荐(0)
摘要:1.静态成员函数 === a.静态成员函数是类中特殊的成员函数(静态成员函数没有隐藏的this参数,不能 直接 去访问普通的成员函数和成员变量) b.静态成员函数属于整个类所有 c.可以通过 类名 直接访问公有 静态 成员函数(变量) d.可以通过 对象名 访问公有 静态 成员函数(变量) 静态成员 阅读全文
posted @ 2019-11-13 11:17 人民广场的二道贩子 阅读(155) 评论(0) 推荐(0)
摘要:1.静态成员变量 === a.静态成员变量属于整个类 b.静态成员变量的生命周期不依赖任何对象,它如全局变量一般。就是程序的运行周期 c.可以通过 类名 直接访问 公有 的静态成员变量 d.所以对象共享类的静态成员变量 e.可以通过对象名访问 公有 静态成员变量 静态成员变量的特性 a.在定义时直接 阅读全文
posted @ 2019-11-13 10:33 人民广场的二道贩子 阅读(138) 评论(0) 推荐(0)
摘要:1.当程序中存在多个对象的时候,如何确定这些对象的析构顺序? === 单个对象 单个对象创建时 构造函数 的调用顺序 a.调用父类的构造函数 b.调用成员变量的构造函数(调用顺序与声明顺序相同) c.调用类自身的构造函数 析构函数与对应的构造函数的调用顺序相反 多个对象 多个对象时,析构函数与构造顺 阅读全文
posted @ 2019-11-12 16:48 人民广场的二道贩子 阅读(208) 评论(0) 推荐(0)
摘要:1.下面程序输出什么?为什么? === include class Test { int mi; public: Test(int i) { mi = i; } Test() { Test(0); //直接调用了构造函数,会产生一个临时对象;Test(0)这个构造函数对这个临时对象进行初始化后。就被 阅读全文
posted @ 2019-11-10 11:42 人民广场的二道贩子 阅读(148) 评论(0) 推荐(0)
摘要:1.析构函数 === a.c++的类中可以定义一个特殊的清理函数:析构函数。析构函数的功能与构造函数相反。 b.定义: ~ClassName() 1).析构函数 没有参数 也 没有返回值类型声明 ; 2).析构函数在对象销毁时自动被调用 (因为没有参数,所以析构函数不存在函数重载的问题) inclu 阅读全文
posted @ 2019-11-09 16:43 人民广场的二道贩子 阅读(129) 评论(0) 推荐(0)
摘要:问题:c++中类可以定义多个对象,那么对象构造的顺序是怎么样的? === 1.局部对象 === 当 程序执行流到达 对象的定义语句是进行构造。 include class Test { private: int mi; public: Test(int i) { mi = i; printf("Te 阅读全文
posted @ 2019-11-09 16:04 人民广场的二道贩子 阅读(114) 评论(0) 推荐(0)
摘要:1.类成员的初始化 === c++中提供了初始化列表对 类 成员变量进行初始化 语法规则: 使用在构造函数的定之后,函数体之前 ClassNam::ClassName() : m1(v1), m2(v1, v2), m3(v3) //初始化列表 { //some other initialiaze 阅读全文
posted @ 2019-11-09 15:14 人民广场的二道贩子 阅读(143) 评论(0) 推荐(0)
摘要:1.思考:对象中成员变量的初始值是多少? === 在 栈 上创建对象时,成员变量初始为 随机值 在 堆 上创建对象时,成员变量初始为 随机值 在 静态存储区 上创建对象时,成员变量初始为 0值 include class Test { private: int i; int j; public: i 阅读全文
posted @ 2019-11-08 15:54 人民广场的二道贩子 阅读(143) 评论(0) 推荐(0)
摘要:第13课.进阶面向对象(上) === 1.类和对象基本概念 类 :是指一类事物,是一个抽象的概念。用于描述一类事物所特有的属性和行为。 对象:指的是属于某个类的具体实体。拥有所属类中描述的一切行为和行动。 类是一种模型,这种模型可以创建出不同的对象实体;对象实体是类模型的一个具体实例。 (类是一个概 阅读全文
posted @ 2019-11-05 17:01 人民广场的二道贩子 阅读(131) 评论(0) 推荐(0)
摘要:问题1:const什么时候为只读变量?什么时候是常量? === const常量的判别准则: a.只有用字面量初始化的const常量才会进入符号表(直接初始化过的const为常量) b.被使用其他变量初始化的const常量仍然是只读变量(间接初始化的const为只读变量) c.被volatile修饰的 阅读全文
posted @ 2019-11-05 09:48 人民广场的二道贩子 阅读(138) 评论(0) 推荐(0)
摘要:1.新型类型转换 === c++将强制类型转换分为4种不同的类型 static_cast const_cast dynamic_cast reinterpret_cast 用法: xxx_cast(Expression) static_cast === a.用于基本类型间的转换 b.不能用于基本类型 阅读全文
posted @ 2019-11-04 15:40 人民广场的二道贩子 阅读(133) 评论(0) 推荐(0)
摘要:1.动态内存分配 === a.c++中通过 new 关键字进行动态内存申请 b.c++中的动态内存申请是基于类型进行的 c.delete关键字用于内存释放 2.new关键字与malloc函数的区别 === a.new关键字是c++的一部分 malloc是由c库提供的函数 b.new以具体类型为单位进 阅读全文
posted @ 2019-11-04 14:48 人民广场的二道贩子 阅读(129) 评论(0) 推荐(0)
摘要:1.重载与指针 === typedef int ( PFUNC)(int a); int c = 0; PFUNC p = func; c = p(1); //which function to call 第一个 函数重载遇上函数指针 将重载函数名赋值给函数指针时 a.根据重载规则挑选与函数指针参数 阅读全文
posted @ 2019-11-03 14:40 人民广场的二道贩子 阅读(125) 评论(0) 推荐(0)
摘要:1.函数重载 === a.用同一个函数名定义不同的函数 b.当函数名和不同的参数搭配函数的含义不同 int func(int x) { return x; } int func(int a, int b) { return a + b; } int func(const char s) { retu 阅读全文
posted @ 2019-11-03 10:33 人民广场的二道贩子 阅读(116) 评论(0) 推荐(0)
摘要:1.函数参数的默认值 === a.c++中可以在函数声明时为参数提供默认值 b.当函数调用时没有提供参数的值,则使用默认值 c,参数的默认值必须在 函数声明中指定 注意 :函数的默认值只能赋值一次,或是在声明中或是在定义中(有声明在声明中定义,没有时可在定义中定义) 2.函数默认参数的规则 === 阅读全文
posted @ 2019-11-02 10:23 人民广场的二道贩子 阅读(131) 评论(0) 推荐(0)
摘要:1. === 正常函数的使用涉及(压栈,跳转,返回)等等,内联函数则没有这些问题,它是直接去扩展。 c++中推荐使用内联函数替代宏代码片段;(内联函数对代码块的替换不是宏代码块那种简单的文本替换,不是由预处理器完成的。而是由编译器,将编译生成的代码拿来扩展。因为是由编译器编译的,所以可以进行参数类型 阅读全文
posted @ 2019-11-01 16:22 人民广场的二道贩子 阅读(136) 评论(0) 推荐(0)
摘要:1.引用的意义 === a.作为变量别名而存在,在一些场合代替指针 b.相对于指针来说具有更好的可读性和实用性 注: 函数中的引用形参不需要进行初始化 使用指针 使用引用 2.特殊的引用 === a.在c++中可以声明const引用 const 引用让变量拥有只读属性(只可间接的去修改) b.当使用 阅读全文
posted @ 2019-11-01 15:23 人民广场的二道贩子 阅读(126) 评论(0) 推荐(0)