随笔分类 -  编程语言及数据结构 / C++

摘要:类中的函数重载 函数重载回顾函数重载的本质为相互独立的不同函数C++中通过函数名和函数参数确定函数调用无法直接通过函数名得到重载函数的入口地址函数重载必然发生在同一个作用域中 类中的成员函数可以进行重载-构造函数的重载-普通成员函数的重载-静态函数的重载 问题:全局函数,普通成员函数以及静态成员函数 阅读全文
posted @ 2019-11-19 23:11 一代枭雄 阅读(190) 评论(0) 推荐(0) 编辑
摘要:C++和C相互调用实际工程中C++和C代码相互调用是不可避免的C++编译器能够兼容C语言的编译方式C++编译器会优先使用C++编译的方式extern关键字能强制让C++编译器进行C方式的编译 extern "C"{ // do C-style compilation here} 假设在C++中调用用 阅读全文
posted @ 2019-11-19 22:17 一代枭雄 阅读(866) 评论(0) 推荐(0) 编辑
摘要:函数重载遇上函数指针-将重载函数名赋值为函数指针时 1. 根据重载规则挑选与函数指针列表一致的候选者; 2. 严格匹配候选者的函数类型与函数指针的函数类型 看下面的代码: 打印结果c=1 做这样的修改,typedef void(*PFUNC)(int a); 编译时将出现这样的错误, 说明当函数重载 阅读全文
posted @ 2019-11-19 21:39 一代枭雄 阅读(586) 评论(0) 推荐(0) 编辑
摘要:重载(Overload)同一个标识符在不同的上下文中有不同的意义如: "洗"和不同的词搭配后有不同的含义 洗衣服,洗脸,洗脑,洗马桶 "play"和不同的单词搭配后会有不同的含义 play chess, play piano, play basketball 重载在自然语言中是随处可见的,那么程序设 阅读全文
posted @ 2019-11-18 23:48 一代枭雄 阅读(208) 评论(0) 推荐(0) 编辑
摘要:友元的概念什么是友元?友元是C++中的一种关系友元关系发生在函数与类之间或者类与类之间友员关系是单向的,不能传递 友元的用法在类中以friend关键字声明友元类中的友元可以是其它类或者具体的函数友元不是类的一部分友元不受类中访问级别的限制友元可以直接访问具体类的所有成员 在类中用friend关键字对 阅读全文
posted @ 2019-11-17 17:48 一代枭雄 阅读(154) 评论(0) 推荐(0) 编辑
摘要:二阶构造工程开发中的构造过程可分为-资源无关的初始化操作 不可能出现异常情况的操作- 需要使用系统资源的操作 可能出现异常情况,如:内存申请,访问文件 二阶构造示例一class TwoPhaseCons{private: TwoPhaseCons(){ //第一阶段构造函数,就是用C++中的构造函数 阅读全文
posted @ 2019-11-17 15:28 一代枭雄 阅读(195) 评论(0) 推荐(0) 编辑
摘要:构造函数的回顾关于构造函数——类的构造函数用于对象的初始化——构造函数与类同名并且没有返回值——构造函数在对象定义时自动被调用 问题:1. 如何判断构造函数的执行结果? 目前来说,没有办法来判断构造函数的执行结果2. 在构造函数中执行return语句会发生什么? 在构造函数中可以存在return语句 阅读全文
posted @ 2019-11-17 11:52 一代枭雄 阅读(205) 评论(0) 推荐(0) 编辑
摘要:未完成的需求统计在程序运行期间某个类的对象数目保证程序的安全性(不能使用全局变量)随时可以获取当前对象的数目(failure) 假设程序中没有Test对象,你就无法获取当前对象的数目。因为在上一个程序中是使用对象去调用成员函数的,此时如果没有对象,如何去调用呢? 解决方案1: 上述程序,虽然可以统计 阅读全文
posted @ 2019-11-16 23:21 一代枭雄 阅读(205) 评论(0) 推荐(0) 编辑
摘要:成员变量的回顾通过对象名能够访问public成员变量每个对象的成员变量都是专属的成员变量不能在对象之间共享 (成员变量一般都设置为私有的) 新的需求统计在程序运行期间某个类的对象数目保证程序的安全性(不能使用全局变量)随时可以获取当前对象的数目 解决方案的尝试 上面这种方案显然是失败的。 可以通过一 阅读全文
posted @ 2019-11-16 21:55 一代枭雄 阅读(196) 评论(0) 推荐(0) 编辑
摘要:关于类成员的疑问成员函数和成员变量都是隶属于具体对象吗?成员变量必然是隶属具体对象的,那成员函数呢?是不是每个对象都有自己的一套成员函数呢?答案否 从面向对象的角度 对象由属性(成员变量)和方法(成员函数)构成从程序运行的角度 对象是由数据和函数构成 数据可以位于栈,堆和全局数据区 函数只能位于代码 阅读全文
posted @ 2019-11-16 20:51 一代枭雄 阅读(278) 评论(0) 推荐(0) 编辑
摘要:关于const对象的疑问const关键字能否修饰类的对象?如果可以,有什么特性?const关键字能够修饰对象const修饰的对象为只读对象只读对象的成员变量不允许被改变。(对象是只读的,成员变量不允许被改变 )只读对象是编译阶段的概念,运行时无效。 C++中的const成员函数-const对象只能调 阅读全文
posted @ 2019-11-16 20:16 一代枭雄 阅读(251) 评论(0) 推荐(0) 编辑
摘要:当程序中存在多个对象的时候,如何确定这些对象的析构顺序? 关于析构的疑问单个对象创建时构造函数的调用顺序1. 调用父类的构造过程(后续再说)2. 调用成员变量的构造函数(调用顺序与声明顺序相同) 有可能某个类,它里面的成员是其他类的对象。此时就调用成员变量的构造函数。3. 调用类自身的构造函数 析构 阅读全文
posted @ 2019-11-13 23:56 一代枭雄 阅读(292) 评论(0) 推荐(0) 编辑
摘要:神秘的临时对象(上) 有趣的问题: 下面的程序输出什么,为什么? 程序意图:在Test()中以0作为参数调用Test(int i)将成员变量mi的初始值设置为0运行结果:成员变量mi的值为随机值 运行程序后,你会发现mi的值是一个随机数,为什么会出现这种情况呢? 思考:构造函数是一个特殊的函数是否可 阅读全文
posted @ 2019-11-13 23:30 一代枭雄 阅读(181) 评论(0) 推荐(0) 编辑
摘要:对象的销毁生活中的对象都是被初始化后才上市的(从而引入了构造函数)生活中的对象被销毁前会做一些清理工作问题:C++中如何清理需要销毁的对象一般而言,需要销毁的对象都应该做清理解决方案 为每个类都提供一个public的free函数 对象不再需要时立即调用free函数进行清理class Test{ in 阅读全文
posted @ 2019-11-13 22:23 一代枭雄 阅读(194) 评论(0) 推荐(0) 编辑
摘要:对象的构造顺序一C++中的类可以定义多个对象,那么对象的构造顺序是怎样的呢?对于局部对象当程序执行流到达对象的定义语句时进行构造对象定义 >构造 对象的构造顺序二对于堆对象当程序执行流到达new语句时,创建对象使用new创建对象将自动触发构造函数的调用 对于全局对象对象的构造顺序是不确定的不同的编译 阅读全文
posted @ 2019-11-12 23:15 一代枭雄 阅读(158) 评论(0) 推荐(0) 编辑
摘要:初始化列表(上) 类中是否可以定义const成员?下面的类定义是否合法?如果合法,ci的值是什么,存储在哪里?class Test{private: const int ci;public: int getCI() { return ci; }} 编程实验:类中是否可以存在const成员? 上面的程 阅读全文
posted @ 2019-11-06 22:32 一代枭雄 阅读(547) 评论(0) 推荐(0) 编辑
摘要:1. 两个特殊的构造函数 -无参构造函数 没有参数的构造函数 解释:无参构造函数看似非常简单,但是它就特别在它是必须存在的。因为我们要使用一个类的话,就必须创建对象。创建对象必然牵涉到构造函数的调用。 注意:当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且函数体为空。一定要特别注意,当 阅读全文
posted @ 2019-11-04 22:43 一代枭雄 阅读(234) 评论(0) 推荐(0) 编辑
摘要:带有参数的构造函数(可以使每个对象有不同的初始化状态) 构造函数可以根据需要定义参数 一个类中可以存在多个重载的构造函数 构造函数的重载遵循C++重载的规则class Test{public: Test(int v) { //use v to initialize member }} 友情提示对象定 阅读全文
posted @ 2019-10-29 22:54 一代枭雄 阅读(209) 评论(0) 推荐(0) 编辑
摘要:问题: 创建一个对象时,成员变量的初始值是多少? 从程序设计的角度,对象只是变量,因此:-在栈上创建对象时,成员变量初始为随机值-在堆上创建对象时,成员变量初始为随机值-在静态存储区创建对象时,成员变量初始为0值 生活中的对象都是在初始化后上市的(比如说手机)初始状态(出厂设置)是对象普遍存在的一个 阅读全文
posted @ 2019-10-29 22:09 一代枭雄 阅读(202) 评论(0) 推荐(0) 编辑
摘要:类的真正形态(上) 问题:经过不停的改进,结构体struct变得越来越不像它在C语言中的样子了。在C语言中,struct中是不能定义成员函数的,你如果实在想用成员函数,只能定义成函数指针的形式。这种方式在内核中太普遍了。 struct 在C语言中已经有了自己的含义,因此C++也得必须继续兼容,但是在 阅读全文
posted @ 2019-10-28 22:30 一代枭雄 阅读(223) 评论(0) 推荐(0) 编辑