C++
qcz_nuist
这个作者很懒,什么都没留下…
展开
-
new和malloc
new和delete C++ 中的 new 和 delete 分别用来分配和释放内存,它们与C语言中 malloc()、free() 最大的一个不同之处在于:用 new 分配内存时会调用构造函数,用 delete 释放内存时会调用析构函数。构造函数和析构函数对于类来说是不可或缺的,所以在C++中我们非常鼓励使用 new 和 delete。 new[]与new的却别 new ...原创 2018-04-14 17:34:50 · 110 阅读 · 0 评论 -
纯虚函数和抽象类
语法格式:virtual 返回值类型 函数名 (函数参数) = 0; 含有纯虚函数的类为抽象类。 注意点:抽象类不能常见对象:因为纯虚数没有函数体,不是完整的函数,无法调用,因此无法实例化。抽象函数一般用来作为基类,让派生类去实现虚函数。 在这个抽象类中,如果有其他不是虚函数的成员函数,那么只要定义一个基类指针指向派生类,就可以直接调用这些正常的成员函数。抽象类与虚函数的说明:1) 一个纯虚函数就...原创 2018-04-16 21:22:29 · 790 阅读 · 0 评论 -
函数重载/遮蔽/隐藏
重载、遮蔽、隐藏函数重载:(只有在一个类中,没有继承父类的函数情况下)表示在同一个类中,函数名称相同,而参数不同,称为函数重载 函数遮蔽:(基类指针指向派生类,调用情况下)函数遮蔽是指子类覆盖父类的函数,覆盖的要求是函数名相同,参数相同,并且父类函数必须有virtual关键字,如果父类没有virtual关键字,就构不成遮蔽(此时是隐藏) 函数隐藏:(是指在子类对象访问成员函数的时候,隐藏)隐藏是指...原创 2018-04-16 21:14:23 · 275 阅读 · 0 评论 -
多态定义
1、什么是多态性? 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。 只有重写虚函数才体现C++的多态性虚函数: 虚函数对于多态具有决定性的作用,有虚函数才能构成多态。 1) 只需要在虚函数的声明处加上 virtual 关键字,函数定义处可以加也可以不加。 2) 为了方便,你可以只将基类中的函数声明为虚函数,这样所有派生类中...原创 2018-04-16 21:13:23 · 1437 阅读 · 0 评论 -
C++文件输入输出流+输入输出二进制文件(自定义对象)
文件流类和文件流对象文件流是以外存文件为输入输出对象的数据流。输出文件流 内存->外存输入文件流 外存->内存 文件流类流的名称 流的作用 ifstream类 从istream类派生的,用来支持从磁盘文件的输入 ofstream类 从ostream类派生的,用来支持向磁盘文件的输出 fstream类 从iostream类派生的,用来支持对磁盘文件的输入输出 操作:打...原创 2018-04-16 20:22:50 · 5600 阅读 · 0 评论 -
cin
cin是标准输入流,从标准输入设备(键盘)获取数据。只有在输入完数据后再按回车键,该行数据才能被送入键盘缓冲区,形成输入流,提取运算符>>才能从中提取数据程序中的变量通过流提取符“>>”从流中提取数据。流提取符“>>”从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。 cin的终止当遇到无效字符或遇到文件结束符(不是换行符,是文件中的数据已读...原创 2018-04-16 18:17:09 · 217 阅读 · 0 评论 -
cout
输入/输出格式控制内部成员函数流成员函数 与之作用相同的控制符 作用 precision(n) setprecision(n) 设置实数的精度为n位 width(n) setw(n) 设置字段宽度为n位 fill(c) setfill(c) 设置填充宇符c setf() setiosflags() 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中...原创 2018-04-16 18:15:46 · 1095 阅读 · 0 评论 -
模板的全特化与偏特化
特化得作用:函数模板有时候不能适用于所有的数据类型(比如字符串的比较char *数据类型),由此需要进行特化处理,把不适用的部分单独拿出来携程一个函数。 什么是全特化?全特化模板头是 template<>,模板形参没有任何参数,编译器执行程序时,如果存在多个重载关系的模板。匹配的规则是先匹配特殊画的模板,如果没有匹配成功,在匹配通用的模板。 全特化的模板参数是空的,意味着全部模板形参类...原创 2018-04-16 16:26:41 · 400 阅读 · 0 评论 -
类模板定义+用类模板写一个入栈出栈的程序
类模板和函数模板定义类似,都可以看成由模板头和模板体两部分组成。类模板体是一个完整的类。template<typename 形参名1, template 形参名2,……>class 类名{ // …}; 例子:用模板类写一个入栈出栈的程序#include<iostream> using namespace std; template <typename T, u...原创 2018-04-16 11:30:57 · 1555 阅读 · 0 评论 -
函数模板定义
1、函数模板的定义由模板头和模板体构成template<typename 形参名1 , typename 形参2 ,……..>返回值类型 函数名{ 函数体} template<typename 形参名1 , typename 形参2 ,……>被称为模板头 <>可以是typename定义的一个待定的数据类型,也可以是明确的数据类型 模板体第一个标准的函数,包...原创 2018-04-16 11:28:48 · 2198 阅读 · 0 评论 -
友元函数
友元函数和友元类友元函数和不同函数的区别:友元函数在类中声明,那么这个函数就能访问里面的所有成员变量。 友元函数想干嘛?如果我自己定义了一个函数,函数的形参是一个对象,在函数体里面,通过这个对象我访问对象里的所有成员变量,这显然是不行的,因为private/protected不能被外部访问。那怎么办?通过友元函数!那么怎么定义友元函数呢?常规的定义一个函数(这个函数里面的形参是一个对象),然后把这...原创 2018-04-14 18:12:21 · 297 阅读 · 0 评论 -
static和const
static成员变量: static 成员变量必须在类声明的外部初始化,具体形式为: type class::name = value;(注意没有static关键字,仅仅在类中声明的时候加上static) type 是变量的类型,class 是类名,name 是变量名,value 是初始值。将上面的 m_total 初始化: int Student::m_total = 0; 静态成员变...原创 2018-04-14 18:11:17 · 127 阅读 · 0 评论 -
类和对象
对象,类型的一个变量创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数 类不占内存空间方法:类里面的函数、属性:累的成员变量 类和结构体一样,构造类的时候不能对成员变量初始化。可以把它理解为比较复杂的数据类型。因此类的大小和int一种说法。定义一个空类或者结构体,那么他的变量占用的空间是1个字节的占位符。 类的定义注意点:在最后要加一个";"...原创 2018-04-14 17:30:08 · 243 阅读 · 0 评论 -
什么是内联函数
内联函数:在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数体来进行替换。显然,这种做法不会产生转去转回的问题,但是由于在编译时将函数体中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间开销上不像函数调用时那么大。可见他是以目标代码的增加来换取时间的节省。注意点:1、类内定义的函数是内联函数,类外定义的函数是非内联函数(段函数可以定义在类内,长函数可以定义在...原创 2018-04-14 17:31:21 · 899 阅读 · 0 评论 -
构造函数
构造函数:在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。 构造函数的规则:构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,这意味着:不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许;函数体中不能有 return ...原创 2018-04-14 17:32:58 · 246 阅读 · 0 评论 -
析构函数
析构函数 建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存、关闭打开的文件等,这个函数就是析构函数。 析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个~符号 析构函数没有参...原创 2018-04-14 17:33:57 · 294 阅读 · 0 评论 -
定时器事件和随机数(示例代码)
1、QTimeerEvent类用来描述一个定时器事件。对于一个QObject的子类,只需要使用ingQobject:: startTimer(int interval)函数就可以开启一个定时器,这个函数需要输入一个以毫秒为单位的证书作为参数来表明设定的事件,函数返回一个整形的标号来代表这个定时器。当这个定时器溢出时候,就可以在timerEvent()函数中进行需要的操作id1 = startTim...原创 2018-04-19 12:47:08 · 2362 阅读 · 0 评论