随笔分类 -  4. C++

摘要:moc 元对象编译器, 全称是 Meta-Object Compiler,也就是“元对象编译器”。是QT翻译扩展语法到C++语言的工具,目前见扩展了信号与槽机制。 信号/槽方式编程上更方便(不容易出错) 回调需要自行处理麻烦的回调管理,稍微不注意就出错。 而且信号/槽方式更利于mvc分离实现。 信号 阅读全文
posted @ 2021-06-29 00:37 诺谦 阅读(351) 评论(0) 推荐(0) 编辑
摘要:C++ Prime 里有原话(中文):这种“用基类的指针或引用操纵多个类型”的能力被称为多态(polymorphism)。 例如有基类Camera, 他的子类有各种不一样的 camera,可以是佳能的,可以是尼康的...现在已知函数: void lookat(const Camera *pcamer 阅读全文
posted @ 2021-06-09 18:29 诺谦 阅读(259) 评论(0) 推荐(0) 编辑
摘要:虚基类 当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。 虚基类: 为了解决多重继承时,基类可能出现多次继承问题. 如下图所示: 如果未使用虚基类,那么D类会有两份类A的成员变 阅读全文
posted @ 2021-06-09 18:21 诺谦 阅读(211) 评论(0) 推荐(0) 编辑
摘要:大家都知道,在 C++中可以通过 typedef 重定义一个类型: typedef unsigned int uint_t; 被重定义的类型并不是一个新的类型,仅仅只是原有的类型取了一个新的名字。 但是不能用于模版别名,所以C++11版本推荐,通过using来代替typedef 示例如下所示: te 阅读全文
posted @ 2020-12-07 17:06 诺谦 阅读(3666) 评论(0) 推荐(0) 编辑
摘要:1.构造函数不能为虚函数 当我们将构造函数定义为虚函数时,会直接报错: 首先回忆下以前学的virtual虚函数概念: 如果类定义了虚函数,创建对象时,则会分配内存空间,并且为该父类以及其所有子类的内存空间上额外分配一个虚函数表. 虚函数表的作用在于,存储每个类的相同的虚函数名,然后每一次虚函数调用, 阅读全文
posted @ 2019-03-30 22:38 诺谦 阅读(3896) 评论(3) 推荐(1) 编辑
摘要:本章学习内容: 1.const 2.指针const 3.inline内联函数 4.函数重载 5.extern “C” 6.new/delete声明与释放 7.namespace命名空间 8.C++中的4种转换 9.拷贝构造函数 10.构造函数初始化列表 11.析构函数 12.const成员函数 13 阅读全文
posted @ 2019-02-15 15:41 诺谦 阅读(1502) 评论(0) 推荐(3) 编辑
摘要:C++内置了异常处理的语法元素 try catch try语句处理正常代码逻辑 当try语句发现异常时,则通过throw语句抛出异常,并退出try语句 catch语句处理异常情况 当throw语句抛出异常时,则会直接跳到catch语句处理 catch语句允许被重载,在try语句后面可以有多个catc 阅读全文
posted @ 2018-04-14 16:14 诺谦 阅读(961) 评论(0) 推荐(0) 编辑
摘要:单例类 描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针) , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区别在于创建实例的时间不同: 懒汉式 : 指代码运行后,实例并不存在,只有当需要时,才去创建实例(适用于 阅读全文
posted @ 2018-04-12 22:28 诺谦 阅读(12464) 评论(0) 推荐(4) 编辑
摘要:智能指针 在C++库中最重要的类模板之一 智能指针实际上是将指针封装在一个类里,通过对象来管理指针. STL中的智能指针auto_ptr 头文件: <memory> 生命周期结束时,自动摧毁指向的内存空间 不能指向堆数组(因为auto_ptr的析构函数删除指针用的是delete,而不是delete[ 阅读全文
posted @ 2018-04-11 20:17 诺谦 阅读(1905) 评论(0) 推荐(0) 编辑
摘要:在上章25.C++- 泛型编程之函数模板(详解) 学习了后,本章继续来学习类模板 类模板介绍 和函数模板一样,将泛型思想应用于类. 编译器对类模板处理方式和函数模板相同,都是进行2次编译 类模板通常应用于数据结构方面,使得类的实现不在关注数据元素的具体类型,而只关注需要实现的功能 比如: 数组类,链 阅读全文
posted @ 2018-04-10 18:48 诺谦 阅读(5922) 评论(0) 推荐(7) 编辑
摘要:本章学习: 1)初探函数模板 2)深入理解函数模板 3)多参函数模板 4)重载函数模板 当我们想写个Swap()交换函数时,通常这样写: 但是这个函数仅仅只能支持int类型,如果我们想实现交换double,float,string等等时,就还需要从新去构造Swap()重载函数,这样不但重复劳动,容易 阅读全文
posted @ 2018-04-09 17:14 诺谦 阅读(19990) 评论(1) 推荐(7) 编辑
摘要:抽象类和接口 什么是抽象类 用来表示现实世界中的抽象概念 是一种只能定义类型,而不能产生对象的类 只能被子类继承,且抽象类的相关成员函数没有完整的体现,用来被子类重写. 比如图形(Shape)类, 就是一个抽象的概念,因为我们无法计算这个“图形”的面积,所以它的成员函数area()是空的。 而继承它 阅读全文
posted @ 2018-04-08 11:30 诺谦 阅读(1804) 评论(0) 推荐(0) 编辑
摘要:上章链接: 22.C++- 继承与组合,protected访问级别 继承方式 继承方式位于定义子类的”:”后面,比如: 继承方式默认为private 在C++中,继承方式共有3种: public继承 -指父类的成员(变量和函数)访问级别,在子类中保持不变 private继承 -指父类的成员,在子类中 阅读全文
posted @ 2018-04-02 22:22 诺谦 阅读(12104) 评论(1) 推荐(1) 编辑
摘要:在C++里,通过继承和组合实现了代码复用,使得开发效率提高,并且能够通过代码看到事物的关系 组合比继承简单,所以在写代码时先考虑能否组合,再来考虑继承. 组合的特点 将其它类的对象作为当前类的成员使用 比如主机类,拥有 CPU/主板/内存/硬盘这4个对象成员,而这4个对象成员并没有继承主机类的特性和 阅读全文
posted @ 2018-04-02 22:01 诺谦 阅读(2650) 评论(0) 推荐(0) 编辑
摘要:++操作符重载 ++操作符分为前置++和后置++,比如: ++a; a++; ++操作符可以进行全局函数或成员函数重载 重载前置++操作符不需要参数 重载后置++操作符需要一个int类型的占位参数 前置++操作符的返回值为*this 后置++操作符的返回值为临时对象 例如: 隐式转换之explici 阅读全文
posted @ 2018-03-28 19:24 诺谦 阅读(930) 评论(0) 推荐(1) 编辑
摘要:"&&","||"逻辑重载操作符的缺陷 大家,都知道"&&","||"拥有"短路"功能 比如a=(0&&b) : 由于第一个操作数为0,所以不会去判断b的内容,直接执行a=0 比如a=(-100||b): 由于-100不为0,所以不会去判断b的内容,直接执行a=1 可以参考下面代码: 运行打印: 并 阅读全文
posted @ 2018-03-27 23:00 诺谦 阅读(926) 评论(0) 推荐(0) 编辑
摘要:(=)赋值操作符 编译器为每个类默认重载了(=)赋值操作符 默认的(=)赋值操作符仅完成浅拷贝 默认的赋值操作符和默认的拷贝构造函数有相同的存在意义 (=)赋值操作符注意事项 首先要判断两个操作数是否相等 返回值一定是 return *this; 返回类型是Type&型,避免连续使用=后,出现bug 阅读全文
posted @ 2018-03-27 17:14 诺谦 阅读(1203) 评论(0) 推荐(0) 编辑
摘要:在上章17.C++-string字符串类(详解)学习了string类,发现可以通过[ ]重载操作符来访问每个字符。 比如: 接下来,我们来自己写个[ ]重载操作符,来模拟string类 运行打印: 函数对象 函数对象是指该对象具备函数的行为 函数对象,是通过()调用操作符声明得到的,然后便能通过函数 阅读全文
posted @ 2018-03-26 00:11 诺谦 阅读(2148) 评论(0) 推荐(1) 编辑
摘要:C++字符串string类 在C语言里,字符串是用字符数组来表示的,而对于应用层而言,会经常用到字符串,而继续使用字符数组,就使得效率非常低. 所以在C++标准库里,通过类string从新自定义了字符串。 头文件: #include <string> string直接支持字符串连接 string直接 阅读全文
posted @ 2018-03-24 23:56 诺谦 阅读(41731) 评论(7) 推荐(12) 编辑
摘要:在别人代码里,经常看到std命名空间,比如使用std命名空间里的标准输入输出流对象cout: 其中cout相当于控制台输出(console out),然后通过<<左移操作符,将每个字符打印出来. endl相当于就是'\n'换行. 接下来我们便通过上章学习的操作符重载,来实现上面功能 上面的操作符重载 阅读全文
posted @ 2018-03-24 23:42 诺谦 阅读(543) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示