C++
文章平均质量分 70
芳草源
路漫漫其修远兮,吾将上下而求索
展开
-
C++基类与派生类的转换
在公用继承、私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员。因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现。而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能调用转载 2014-10-18 12:23:43 · 786 阅读 · 0 评论 -
重温《C++ Primer》笔记九 const形参小结
首先,形参大致可以分为三种:非引用形参、引用形参和指针类型形参。 一、非引用形参 在传递参数的时候,不论是所谓的传值还是传址,实际上都是实参值到形参值的复制,其中的区别只是复制的是普通对象还是引用对象而已。对于非引用形参,通过参数传递之后,形参是实参的一个副本,而非引用形参使得复制后形参与实参并没有任何关联,因此,在函数中对形参的任何操作将不会影响到实参的值,因此,不论实参是变量还是常原创 2015-07-05 10:36:52 · 677 阅读 · 0 评论 -
重温《C++ Primer》笔记八 数组与指针的几个问题
数组与指针是类似于vector容器和迭代器的低级复合类型,但是数组与指针比较原始,与计算机硬件比较接近,在使用上比较没有什么限制,因此使用数组与指针比使用vector容器和迭代器要危险得多,但是因为可以使用数组与指针直接操作内存,因此其效率也比较高,所以一般也只在程序需要强调速度的时候才使用数组与指针,但是深入理解数组与指针还是十分必要的。有几个常见的比较混淆的问题。 一、下标和指针原创 2015-07-02 10:04:40 · 417 阅读 · 0 评论 -
C++中的内存分配
一、一个C++编译的程序占用内存分为五大部分 1. 栈区(stack):由编译器自动分配与释放,其操作方式类似于数据结构中的栈。 2. 堆区(heap):一般由程序员手动分配释放,若程序员不释放,程序结束时可能有OS回收。(不是数据结构中的堆) 3. 全局区:全局变量和静态变量是放在一块的,初始化的全局变量和静态变量放在初始化区,未初始化的全局变量和静态变量放在相邻的另一块区域,程序转载 2015-05-14 20:05:54 · 396 阅读 · 0 评论 -
重温《C++ Primer》笔记七 VTABLE与VPTR的实现
函数调用的两种绑定 在学习虚函数之前,我们必须了解什么叫做绑定。在程序中调用一个函数,编译阶段会对其类型进行检查,而在链接阶段将与函数定义进行链接。对于一个函数调用,将执行哪个函数体,这是通过绑定来设置的,即把函数体与函数调用相联系称为绑定(binding)。而根据确定能够确定绑定关系的时间,将绑定分为早绑定和晚绑定两种。 1、早绑定(early binding) 早绑定即绑定在程序运行之前原创 2015-04-26 11:08:25 · 1677 阅读 · 0 评论 -
重温《C++ Primer》笔记五 类定义中成员函数的名字隐藏(虚函数与非虚函数)
类定义中大致有两种函数——普通函数和虚函数。如果对一个类继承并且对其中的成员函数重新进行定义,也可以分为两种情况: 1、在派生类的定义中明确地定义操作和返回类型,称之为普通成员函数的重定义(redefining); 2、对虚函数的重定义成为重写(overriding); 下面的程序是摘自《Thinking in C++》上的一段,可以用来解释发生在函数重定义过程中的名字隐藏(这里的名字指的是原创 2015-04-23 10:40:52 · 741 阅读 · 0 评论 -
重温《C++ Primer》笔记四 构造函数的初始化列表
在C++中保证初始化是非常重要的,因为并不能总是保证第一次使用所定义对象的时候是对其赋值而不是读取。因此,在创建一个对象的时候,编译器总是保证该对象中所有的“子对象”全部被初始化。而我们需要关注的则是这些“子对象”是什么,并且是在什么时候被初始化的,以及如何被初始化的。 首先抛出一句话:“子对象”包括成员变量和该类的父类对象。 到底构造函数是在什么时候被调用的呢?很多书上都是很简单地介绍说,是原创 2015-04-23 08:28:11 · 727 阅读 · 0 评论 -
重温《C++ Primer》笔记三 vector、list、deque三种顺序容器小结
我觉得容器是面向对象里面的具有数据结构设计的数组,它拥有了数组的存储其它元素对象的能力,又提供着比数组要大得多得多的控制和操作。简而言之,容器是一种模版类,它可以容纳特定类型的对象集合,这个特定的类型可以由我们在实例化容器对象的时候指定。除了容器本身定义的操作之外,我们的泛型算法也为之定义了更多更强大的操作,被封装在算法库中,后续在泛型算法的笔记中会提到,这里主要是梳理一下容器本身自带的一些操作、原创 2015-03-29 14:20:18 · 928 阅读 · 0 评论 -
重温《C++ Primer》笔记二 标准IO库的条件状态
在C++的标准IO库中,指定了一些方法来管理缓冲区及其流的状态。虽然很多程序只需要知道流是否有效即可,但是,不排除某些程序需要更详细地访问或者控制流的状态,以及当流出现错误的时候需要弄清楚具体是哪方面的错误。 首先,标准IO库用一个枚举来定义了流对象的四种状态: enum _Iostate{ goodbit = 0x0, //正常可用状态 eofbit = 0x1, //遇原创 2015-03-28 10:09:56 · 668 阅读 · 0 评论 -
宏的妙用以及与函数的比较
宏所进行的是一个完全的文本替换工作,它的声明方式如下: #define name(parameter-list) stuff 首先,name为命名的一个符号,stuff为替换文本,parameter-list(参数列表)是一个由逗号隔开的符号列表,这些符号可能出现在后面的stuff中。 使用宏的陷阱 1.如果定义中的stuff非常长,则可以将其分成几行显示,但是除了最后一行之外,每行原创 2015-03-06 15:00:00 · 1117 阅读 · 0 评论 -
C++模板详解
C++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具; 通常有两种形式:函数模板和类模板; 函数模板针对仅参数类型不同的函数; 类模板针对仅数据成员和成员函数类型不同的类。 使用模板的目的就是能够让程序转载 2015-03-04 20:59:52 · 434 阅读 · 0 评论 -
重温《C++ Primer》笔记一 快速入门
一个简单C++程序的结构 main函数 首先,main函数是程序的入口,即程序是从main函数开始执行的,也是从这里结束。 main函数的执行 main函数与普通函数一样也是被调用才开始执行的,但是调用main函数的对象不是main函数本身,而是由系统调用。 main函数的结束 main函数的结束伴随这一条return语句,此语句想系统返回一个值。在大多数系统中,main函数的返回值代原创 2015-03-05 09:12:29 · 468 阅读 · 0 评论 -
Qt中的parent参数
程序写的多了,你会发现几乎所有的Qt类的构造函数都会有一个parent参数。这个参数通常是QObject* 或者是 QWidget* 类型的。很多情况下它都会有一个初始值0,因此,即便你不去给它复制也没有丝毫的问题。于是,稍微偷懒一下,就会不自觉的忽略了这个参数。那么,这个参数到底是干什么用的呢? 其实,这个参数有很多用处。就像它的名字一样,这个参数指定了组件的父组件。对于一个对话转载 2014-12-31 16:06:55 · 2549 阅读 · 0 评论 -
Qt Gui编程中两种创建窗体界面方法
一、手动编写界面代码 Qt编程中所使用的语言是面向对象的C++,在初学GUI编程时,如果仅仅依靠Qt Designer编辑器来通过拖拽一些widget来设计界面,则会很容易迷惑我们,并且很难弄懂其中所涉及的面向对象思想,也不容易弄懂Qt GUI的一个整体结构。所以在初学Qt GUI时可以通过手动编写界面代码来理解Qt 的GUI结构。 1、组合widget方法 顾名思义,组合widget方原创 2014-12-28 20:09:34 · 23271 阅读 · 1 评论 -
C++中this指针的小结
this实质 首先我们要了解一下同一类型定义多个对象的实现情况。在类中定义了数据成员和函数成员(或者一些类型别名),我们在实例化该类型的时候,每个类对象都会有自己的数据成员拷贝,即具有存储类中数据成员的独立存储空间。但是对于类中的成员函数,所有该类对象公用一份。因此该类对象在调用类中的成员函数时,是如何保证成员函数引用的数据成员是自己的呢?比如: class Person { priv原创 2014-12-23 18:43:23 · 748 阅读 · 1 评论 -
C++中缓冲区的理解与IO标准库详解
什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。 为什么要引入缓冲区 比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据转载 2014-12-16 22:17:24 · 6198 阅读 · 2 评论 -
unknown character '0xa1'错误
今天在看博客的时候看到有一段非常好的程序代码,于是我将其拷贝下来黏贴在VC++6.0IDE中进行编译,一下子出现了四十多条错误,而且错误提示都是unknown character '0xa1'错误,我从头检查了一遍代码,发现没有语法或拼写上的错误。后来发现原来是与直接在网页上复制代码有关系。主要出现在程序代码中的空格上,VC++6.0不能识别全角下的空格,而网页上的程序中所使用的空格是在全角下输入原创 2014-12-16 19:50:42 · 5450 阅读 · 0 评论 -
静态库与动态库的理解
的原创 2014-11-05 18:35:09 · 664 阅读 · 0 评论 -
重温《C++ Primer》笔记十 当数组作为函数参数时
提到数组作为实参,大家可能都会想到,数组是不能复制的,所以作为参数时不能真正得到实参数组。另外,使用数组名字的时 候,编译器会自动将其视为指针,因此它实际获得的是实参数组中首个元素的地址。没错,对于非引用数组参数是这样,但是对于 引用数组参数则是可以实现真正的数组传递的。 一、非引用数组形参,[]和长度值的作用 当以数组形式作为函数参数时,首先,[]的作用是告诉编译器这是个原创 2015-08-06 21:19:00 · 792 阅读 · 1 评论