09 2018 档案

摘要:最近在做一个数据资源可视化的项目,需要用到多重线条的配色方案,这里选取了一些视觉上易分辨,搭配起来不至于太不违和的颜色,记录一下。 有做类似项目的同学可以自取,这个是QColor是QT的颜色类型,采用RGB色值初始化,颜色标注可能不是很准确,自行尝试吧 { QColor(255, 0, 0) // 阅读全文
posted @ 2018-09-28 15:46 chattyku 阅读(2019) 评论(0) 推荐(0)
摘要:类类型 对于类来说每个类的定义都是唯一的类型,即使两个类的成员完全一样,他们仍然是不同的类型 类的声明 同函数一样,类也可以只声明而不定义,这种语法的常用场景是在使用类的地方类暂时不可见, 我们把这种声明叫做前向声明,那么在定义之前它将是一个不完全类型。 不完全类型可以定义指针或引用,也可以作为参数 阅读全文
posted @ 2018-09-20 09:00 chattyku 阅读(131) 评论(0) 推荐(0)
摘要:类型成员 类型成员的定义需要注意的是,必须先定义后使用,所以一般定义在类的开头部位。 成员函数及内联成员函数、重载类型 如果在有其他构造函数的情况下,仍然需要使用默认构造函数,请显示的声明它。 内联函数可以在声明的时候指定,也可以在定义的时候指定,也可以两处都指定。 类内部定义的函数默认为内联函数。 阅读全文
posted @ 2018-09-19 09:18 chattyku 阅读(136) 评论(0) 推荐(0)
摘要:上一节中定义的Sales_data,使用者可以任意访问和修改所有的内部变量。 而这与对象设计理念中的封装性是不符合的 面向对象小叙 面向对象的根本思想是模拟真实的生活来进行编程的模块化和对象化的设计。 打比方说,当你的朋友让你帮他做一件事的时候,需要以下的过程。 1. 你收到朋友的请求。 2. 你用 阅读全文
posted @ 2018-09-14 10:13 chattyku 阅读(196) 评论(0) 推荐(0)
摘要:这是定义重写过的数据读取的类。 在该代码的第一行,生命了一个对象,但是并没有对对象进行赋值。 并且对于对象类型而言,我们也不知道该如何对其内容进行初始化赋值。 而未赋值的对象是否会在使用的时候产生问题? 如何对对象进行自定义的初始化赋值? 其实在对象声明的时候编译器会默认调用一个函数,它叫做构造函数 阅读全文
posted @ 2018-09-12 11:44 chattyku 阅读(152) 评论(0) 推荐(0)
摘要:类 本章的内容是类, 类是数据的抽象和封装。 定义一个抽象数据类型 我们在前面使用过Sales_item类型,但是并没有过多的讲述这个类型。 现在我们来讲Sales_data类型改造为支持Sales_item的一个操作集合。 我们需要完成的操作如下: 1. isbn,用来返回对象编号。 2. com 阅读全文
posted @ 2018-09-12 09:57 chattyku 阅读(200) 评论(0) 推荐(0)
摘要:什么是函数指针 如何使用函数指针 直接将函数指针当作函数名称来使用 重载函数的指针 重载函数的指针必须与某一个重载的参数列表精确匹配,在这种情况下就与一般的函数指针没有什么区别了 而使用函数指针的调用并不能触发重载的特性。 函数指针形参 我们可以将函数指针当作一个参数传递进函数中 返回指向函数的函数 阅读全文
posted @ 2018-09-11 10:51 chattyku 阅读(149) 评论(0) 推荐(0)
摘要:一般来说函数的选择是比较明确的事情,因为有着参数类型和参数数量的标准。 但是如果将类型转换和默认参数都加入到重载函数中,这个过程就变的复杂起来。 来看看一下代码: 在函数的选择过程中分为两步: 1. 找到当前作用域可见的所有名称相同的函数 2. 找到参数数量相等且类型相同或可转换的函数 那么在一些极 阅读全文
posted @ 2018-09-11 09:08 chattyku 阅读(184) 评论(0) 推荐(0)
摘要:assert 检查一个不能发生的条件 assert(expr) 当表达式里的值为 0 或false时,输出信息并终止程序的执行。 NDEBUG预处理变量 assert的行为还依赖于NDEBUG的变量。 我们来想一下,如果你的软件已经完成,经过相当的测试,然后需要发布了。 那么这个时候我们将不再需要一 阅读全文
posted @ 2018-09-10 09:34 chattyku 阅读(121) 评论(0) 推荐(0)
摘要:默认实参 有时一个函数的某些参数在绝大多数情况下都被赋予一个相同的值。 在这种情况下我们可以给参数一个固定的默认值。 使指定参数在默认情况下使用指定的默认值 如何声明默认值 在上面的书写中给screen的三个参数都给予了默认值。 默认值实在函数的声明中给参数的后面紧挨一个等号,然后给出值 默认值在函 阅读全文
posted @ 2018-09-10 08:55 chattyku 阅读(155) 评论(0) 推荐(0)
摘要:讲解之前,先来看一组代码 函数的查找分为名称查找和参数匹配(因为重载函数的数量相对较少,所以大部分查找过程并不需要参数匹配) 在C++当中,名字查找在类型检查之前进行。 简单的讲,内层的名称会掩盖外层的名称,而无论该名称是何类型(函数、变量、枚举) 阅读全文
posted @ 2018-09-09 15:00 chattyku 阅读(165) 评论(0) 推荐(0)
摘要:const_cast和重载 在下面的第一个函数中我们使用是否const的字符串都可以调用, 但是返回值也都是const string &。 如果我们需要一个返回后可以被修改的值,也就是左值,那么我们就需要用到第二个函数。 第二个函数中有const_cast对字符串进行从非const到const 再由 阅读全文
posted @ 2018-09-09 14:25 chattyku 阅读(274) 评论(0) 推荐(0)
摘要:在同一个作用域内,几个函数名字相同但形参列表不同,我们成为重载(voerloaded)函数。 在上面的重载函数中,编译器将通过实参的类型和数量进行调用实际函数的选择。 PS: main函数不能被重载 定义重载函数 函数的重载必须在参数数量或参数类型上有差异,返回值的差异不计入重载条件 重载和cons 阅读全文
posted @ 2018-09-08 10:34 chattyku 阅读(143) 评论(0) 推荐(0)
摘要:数组不能被拷贝,所以返回值不能是数组类型。 但是我们可以使用返回指针的方式来实现返回数组的目的 声明一个返回数组指针的函数 返回值是int类型的数组的指针,数组的大小是10 使用尾置返回值类型 C++11 对复杂的返回值类型比较有用。 开头auto的意义就在于表示该函数应该有一个后置返回值类型 使用 阅读全文
posted @ 2018-09-07 09:28 chattyku 阅读(219) 评论(0) 推荐(0)
摘要:列表初始化返回值 C++11规定可以以列表初始化的方式来进行返回值的表达。 主函数main的返回值 非void返回值类型的函数,必须有一条返回值。 main函数是这条规定中的一个例外。 虽然看上去可以不写return,但实际的情况是编译器会添加一条reuturn 0的语句。 一般来说main函数的返 阅读全文
posted @ 2018-09-07 09:11 chattyku 阅读(258) 评论(0) 推荐(0)
摘要:返回类类型的函数和调用运算符 函数调用也是一个运算符,同样存在优先级和结合律。 调用运算符与点运算符和箭头运算符同优先级,满足左结合律。 因此在函数返回类类型的对象时,我们可以直接对对象进行访问。 在下面的代码中直接对返回值进行了size() 函数的调用。 这种函数的设计方式在java中比较常见,需 阅读全文
posted @ 2018-09-06 08:52 chattyku 阅读(128) 评论(0) 推荐(0)
摘要:值是如何被返回的 返回值用于初始化调用点的一个临时量。 在下面的函数中,返回值的内容是被拷贝到调用点 在下面的函数中则是将引用型参数作为返回值直接返回了参数的引用 不要返回局部对象的引用或指针 在函数运行返回后到达返回点,函数运行过程中所占用空间被随之释放。 这个过程意味着在函数返回后所有的函数体内 阅读全文
posted @ 2018-09-06 08:30 chattyku 阅读(185) 评论(0) 推荐(0)
摘要:eturn语句终止当前执行的函数,并返回控制权到上层函数。 两种形式,一种不含有值,一种含有值或表达式 无返回值类型 带有返回值类型的函数 尽管C++无法保证返回值的正确性,但是可以保证类型的正确性。 但是上面的函数存在两个错误,编译的时候将会被检查出来,我们来看看。 第一个错误,我们在23行的定义 阅读全文
posted @ 2018-09-05 09:38 chattyku 阅读(270) 评论(0) 推荐(0)
摘要:形如printf这类的函数。 有时候我们无法确定参数的数量,这时我们需要可变参数个数的函数声明。 今天我们讲述两种方法来进行参数可变函数的声明 编译运行结果如下: 在省略号的参数类型中,新加入的内容是几个宏的定义符号va_list 、va_start、va_end、va_arg 宏的定义如下: 阅读全文
posted @ 2018-09-05 09:10 chattyku 阅读(119) 评论(0) 推荐(0)
摘要:所讲到的main函数都是空参数列表的。 相信大家都见过启动程序带的参数,那么这些参数时如何传递进去的。 现在我们来看一下main函数声明的完整形式 阅读全文
posted @ 2018-09-04 11:27 chattyku 阅读(127) 评论(0) 推荐(0)
摘要:数组的两个特殊性质:1.不能拷贝 2.使用时通常会被转换成指针 所以在数组作为参数时,实际传递的是首地址的指针。 虽然数组会被转换为指针进行传递,但是我们在定义函数的时候依然可以使用数组形参。 为了方便大家理解,我做了一些小的修改,这样便于大家对数组参数的特性做一个清晰的认识。 代码如下: 代码的编 阅读全文
posted @ 2018-09-03 09:28 chattyku 阅读(189) 评论(0) 推荐(0)
摘要:一般对象类型的const形参 形参的顶层const将被忽略掉 为了说明这个问题我们引入两组代码来进行参照说明。 在const一般对象的形参中需要掌握的特性有两种: 1. const的形参可以使用const实参或非const实参进行函数调用 2. 编译器不会将函数参数是否const的区别认定为重载函数 阅读全文
posted @ 2018-09-03 08:48 chattyku 阅读(193) 评论(0) 推荐(0)
摘要:参数传递的两种基本类型 值传递 (pass by value) 拷贝实参后赋值给形参,两个参数内容相同,但在内存中分别时不同的位置 以传值方式进行的函数调用如果在内部修改参数的值对实参不会有任何影响。 如果需要在内部改变参数的值,其中一种方式是使用指针来传递该值。 将上面的代码修改为 引用传递(pa 阅读全文
posted @ 2018-09-02 09:02 chattyku 阅读(153) 评论(0) 推荐(0)
摘要:函数与变量等一样,需要在使用前进行声明。 函数的声明与定义的区别是声明不需要函数体并以分号结尾 一般我们将函数的声明放到头文件中 在加入声明之后则可以编译通过。 复杂的程序我们需要进行文件的分离,而分离后又该如何进行编译。 下面我们来展示一个多文件分离编译的小工程: 编译的时候需要将两个cpp文件都 阅读全文
posted @ 2018-09-01 17:59 chattyku 阅读(158) 评论(0) 推荐(0)
摘要:对名字而言有作用域的限制 名字的作用域是程序文本的一部分,名字在其中可见。 对对象而言有生命周期的限制。 对象的生命周期是程序执行过程中该对象存在的一段时间 函数体由两个花括号组成的范围是一个新的作用域。 所有在这个作用域内定义的变量都是局部变量,仅在这个作用域内可见。 局部变量还会隐藏外层作用域中 阅读全文
posted @ 2018-09-01 16:58 chattyku 阅读(108) 评论(0) 推荐(0)