C++
文章平均质量分 74
c1392851600
这个作者很懒,什么都没留下…
展开
-
C++ Primer Plus 书之--C++ cin, cin相关方法, 及输入相关的知识点
cincin >> 如何检查输入不同版本的抽取运算符查看输入流的方法是相同的. 他们跳过空白(空格, 换行符, 制表符), 直到遇到非空白字符. 但对于c语言的字符输入函数, 并不是这样的, 在单字符模式下(char, unsigned char或signed char), >> 运算符将读取该字符, 将它放置到指定的位置. 在其他模式下, >> 运算符...原创 2019-01-25 22:49:03 · 782 阅读 · 0 评论 -
C++Primer Plus书之--运算符重载和友元函数
运算符重载:要重载运算符, 需要使用被称为运算符函数的特殊函数形式, 运算符函数的格式如下:operatorop(argument list)例如:operator+()重载+运算符, operator*()重载*运算符, op必须是有效的C++运算符.例如, 假设有一个Sales类, 并为他定义了一个operator+()成员函数, 以重载+运算符, 以便能够将两个Sales对...原创 2018-12-11 23:20:03 · 376 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ 模板类深究2--模板类和友元
模板类和友元模板类声明也可以有友元, 模板的友元分为3类:1.非模板友元2.约束模板友元, 即友元的类型取决于类被实例化时的类型3.非约束模板友元, 即友元的所有具体化都是类的每一个具体化的友元.1.模板类的非模板友元函数:在模板类中将一个常规函数声明为友元:template <class T>class HasFriend{public: fri...原创 2018-12-27 23:15:18 · 503 阅读 · 0 评论 -
C++ Primer Plus书之--C++ this指针和类作用域及作用域内枚举
this指针this指针指向用来调用成员函数的对象(this被作为隐藏参数传递给方法), 也就是this能指向本类对象, 看一个例子, 比较两个Stock对象的total_val值, 谁的total_val值大, 就返回哪个对象.// 第一个const表示返回一个const的引用// 第二个const表示, 要显示的访问一个const引用对象// 第三个const表示, 函数不会修改...原创 2018-12-10 23:07:30 · 557 阅读 · 0 评论 -
C++Primer Plus书之--C++ 自定义队列的实现 和 成员初始化列表
队列模拟队列的特点是先进先出, 栈是先进后出要先定一个一个node, 里面存储的是数据和指向下一个节点的指针struct Node{ Item item; struct Node * next;}这里的Item就是队列中需要存放的元素类型Queue就是我们自己定义的队列对象:class Queue{private: enum {Q_SIZE = 10};...原创 2018-12-16 20:26:33 · 811 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ 模板类深究1
模板类可以使用多个类型参数:看一个例子:// pairs.cpp#include <iostream>#include <string>template <class T1, class T2>class Pair{private: T1 a; T2 b;public: // 这两个返回引用的实现虽然逻辑和后面的返回对象的实现是一...原创 2018-12-26 23:20:59 · 472 阅读 · 1 评论 -
C++ Primer Plus书之--C++ new运算符注意事项
在构造函数中使用new时的注意事项:1.如果在构造函数中使用new来初始化指针成员, 则应该在析构函数中使用delete2.new和delete必须相互兼容, new对应于delete, new[]对应于delete[]3.如果有多个构造函数, 则必须以相同的方式使用new, 要么都带中括号, 要么都不带. 因为只有一个析构函数, 所有的构造函数都必须与它兼容. 然而可以在一个构造函数...原创 2018-12-16 12:23:49 · 277 阅读 · 0 评论 -
C++Primer Plus 书之--C++ 静态类成员函数
静态类成员函数可以将成员函数声明为静态的(函数声明必须包含关键字static, 但是如果函数定义时独立的, 则其中不能包含 关键字static).静态类成员函数有如下特点:1.不能通过对象调用静态成员函数.2.如果静态成员函数是在共有部分声明的, 则可以使用类名和作用域解析运算符来调用它.3.静态成员函数不与特定的对象关联, 因此只能使用静态数据成员.例如给String类添...原创 2018-12-16 09:49:55 · 998 阅读 · 2 评论 -
C++ Primer Plus书之--C++ 继承和动态内存分配(使用new和delete), 继承关系中的析构函数, 复制构造函数, 赋值运算符及友元函数
第一种情况: 派生类不使用new假设基类使用了动态内存分配, 并且重新定义复制和赋值运算符:class BaseDMA{private: char * label; int rating;public: BaseDMA(const char * l = "null", int r = 0); // 复制构造函数 BaseDMA(const BaseDMA & rs...原创 2018-12-20 23:23:33 · 453 阅读 · 0 评论 -
C++ Primer Plus书之--C++ 怎么定义一个抽象类
抽象基类(Abstruct base class)包含纯虚函数的类只用作基类, 要成为抽象基类, 必须至少包含一个纯虚函数.纯虚函数: 函数原型中的=0使虚函数称为纯虚函数. 例如下面例子中的Area()方法class BaseEllipse{private: double x; double y; public: BaseEllipse(double x0 = 0, ...原创 2018-12-20 22:49:03 · 2401 阅读 · 0 评论 -
C++ Primer Plus书之--C++ 类的构造函数和析构函数
类的构造函数和析构函数构造函数就是为了在类初始化的时候, 初始化类需要的变量, 例如:// 提供了一个三个参数的构造函数原型// 构造函数原型位于类声明的共有部分Stock(const string & co, long n, double pr = 0.0);构造函数名和类名相同, 但是没有返回值来看一个构造函数的定义:// 构造函数定义Stock::Sto...原创 2018-12-09 22:29:01 · 395 阅读 · 0 评论 -
C++ Primer Plus书之--C++类 简介
C++中的类来看一个简单的类的简单声明, 了解下类的基本描述class World{ // 私有变量外界不能直接访问 // C++中默认为private, 即使不明确写明是private的 // 类对象的默认访问控制是private. float mass; char name[20]; public: void...原创 2018-12-09 18:20:49 · 247 阅读 · 0 评论 -
C++ Primer Plus书之--C++ 静态联编和动态联编
静态联编和动态联编将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编.静态联编: 在编译过程中进行联编, 又叫早期联编动态联编:编译器必须生成能够在程序运行时选择正确的虚方法的的方式被称为动态联编(dynamic binding), 又称为晚期联编(late binding).将派生类引用或指针转换为基类引用或指针被称为向上强制转换(upcasting), 这使得共有继...原创 2018-12-19 23:14:38 · 336 阅读 · 0 评论 -
C++ Primer Plus书之--C++内存分配, new动态分配内存, 定位new运算符
先看一个小知识点:函数和链接性C++不允许在一个函数中定义另外一个函数, 所有的函数存储持续性都是自动为静态的, 即在整个程序执行期间都一直存在. 默认情况下函数的链接性为外部的, 即可以在文件间共享. 要让程序在另一个文件中查找函数, 该文件必须作为程序的组成部分被编译, 或者是又链接程序搜索的库文件. 还可以使用static关键字将函数的链接性设置为内部的, 使之只能在一个文件中使用,...原创 2018-12-06 23:00:46 · 404 阅读 · 0 评论 -
C++ Primer Plus书之--C++ valarray类简介
valarray 类简介valarray类是由头文件valarray支持的.valarray是一个模板类使用valarray类声明一个对象时, 需要在标识符valarray后面加上<>, 并在其中包含所需的数据类型:valarray<int> q_values;valarray<double> weights;其常用的语法如下:do...原创 2018-12-23 20:26:17 · 1053 阅读 · 1 评论 -
C++ Primer Plus 书之--C++ 友元类和友元成员函数
友元类:我们创建一个tv类, 一个remote类, 由于遥控器能够对tv进行换台, 因此需要remote类能够访问tv的成员, 所以remote类可以设置成一个友元类, 由于remote类中需要使用到tv的东西, 因此先声明tv, 后声明remote类, 如下所示:// tv.h#ifndef TV_H_#define TV_H_class Tv{private: int ...原创 2018-12-28 23:09:48 · 732 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ 容器简介 set, map
容器:vectorvector是数组的一种表示, 可以动态的改变vector对象的长度, 提供了对元素的随机访问, 在尾部添加和删除元素的时间是固定的, 但是在头部或中间插入和删除元素的复杂度为线性时间.vector还是可反转容器(reversible container)概念的模型. 增加了两个类方法rbegin()和rend(), 前者返回一个指向反转序列的第一个元素的地带器, 后...原创 2019-01-16 22:56:36 · 544 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ cout输出及cout的格式化setf()
和IO相关的类:1. streambuf类为缓冲区提供了内存, 并提供了用于填充缓冲区, 访问缓冲区内容, 刷新缓冲区和管理缓冲区内存的类方法;2. ios_base类表示流的一般特征, 如是否可读取, 是二进制流还是文本流等.3. ios类基于ios_base, 其中包括了一个指向streambuf对象的指针成员;4. ostream类时从ios类派生而来的, 提供了输出方法;...原创 2019-01-21 23:34:57 · 812 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ 文件的基本输入和输出
文件输入和输出简单的文件I/O要让程序写入文件, 步骤如下:1. 创建一个ofstream对象来管理输出流;2. 将该对象与特定的文件关联起来;3. 以使用cout的方式使用该对象, 唯一的区别是输出将输出到文件而不是屏幕.要完成这个功能, 首先应包含头文件fstream, 对于大多数实现来说, 包含该头文件边会自动包含iostream文件. 然后声明一个ofstream对...原创 2019-01-25 22:49:11 · 909 阅读 · 1 评论 -
C++ Primer Plus 书之--C++ 智能指针 auto_ptr, shared_ptr, unique_ptr
智能指针:智能指针的好处就是, 当智能指针过期时, 其析构函数将使用delete来释放内存. 因此, 如果将new返回的地址赋值给这些对象, 将无需记住稍后释放这些内存: 在只能指针过期时, 这些内存将自动被释放.有三个只能指针模板: auto_ptr, unique_ptr 和 shared_ptr 都定义了类似指针的对象, 可以将new获得(直接或间接)的地址赋给这种对象.要创建只...原创 2019-01-09 23:37:54 · 627 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ vector模板类及常用方法和iterator简介
使用vector模板可使用<type>支出要存储的数据类型, 也可以使用初始化参数来指出需要多少空间:#include <vector>using namespace std;// 含有5个int的vectorvector<int> ratings(5); int n;cin >> n;vector<double> ...原创 2019-01-14 23:14:49 · 498 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ string类
string类先来看个string构造函数的使用示例:// str1.cpp#include <iostream>#include <string>int main(){ using namespace std; // string(const char * s) string one("Lottery Winner!"); cout <&...原创 2019-01-07 23:29:48 · 313 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ 类库介绍(valarray, slice) 和模板initializer_list
其他库介绍C++提供了三个数组模板: vector, valarray和arrayvector: 是一个容器类和算法系统的一部分, 支持面向容器的操作, 如:排序, 插入, 重新排列, 搜索, 将数据转移到其他容器中等.valarray类模板: 是面向数值计算的. 不是STL的一部分, 但提供了很多数学运算的简便接口array: 是为了代替内置数组设计的, 它提供更好, 更安全的接...原创 2019-01-17 23:18:24 · 470 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ 异常和异常处理的方式
异常调用abort()abort()函数的原型位于头文件cstdlib(或stdlib.h)中, 其典型实现是像标准错误流(即cerr使用的错误流)发送消息abnormal program termination(程序异常中止)来看一个简单的例子:// error1.cpp#include <iostream>#include <cstdlib>/...原创 2019-01-02 23:53:30 · 503 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ RTTI及类型转换
RTTI(Runtime Type Identification)运行阶段类型识别, 就是运行阶段, 基类的指针能够知道指向的对象的具体类型:C++有3个支持RTTI的元素1.如果可能的话, dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针; 否则, 该运算符返回0--空指针.2.typeid运算符返回一个指出对象的类型的值3.type_info...原创 2019-01-06 18:05:45 · 278 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ 模板类
定义模板类先看一个之前自定义的Stack类// 别名typedef unsigned long Item;class Stack{private: enum {MAX = 10}; Item items[MAX]; int top; public: Stack(); bool isempty() const; bool isfull() const; bool...原创 2018-12-25 22:51:53 · 457 阅读 · 0 评论 -
C++ Primer Plus书之--C++ 虚函数与多态的实现
C++中实现多态的方法:1.在派生类中重新定义基类的方法2.使用虚方法先看一个带虚方法的基类和派生类的声明:// brass.h#ifndef BRASS_H_#define BRASS_H_#include <string>// 基类class Brass{private: std::string fullName; long acctNum;...原创 2018-12-18 23:44:01 · 606 阅读 · 0 评论 -
C++Primer Plus书之--C++类继承, 派生类和基类之间的关系(子类与父类之间的关系)
基类: 原始类, 也就是最顶层的类派生类: 也叫做继承类, 是也就是基类的子类, 是继承自基类的类先来看定义的一个基类, 及对应的实现:// tabtennis0.h#ifndef TABTENNIS_H_#define TABTENNIS_H_#include <string>using std::string;// 基类class TableTenni...原创 2018-12-18 23:12:48 · 1390 阅读 · 0 评论 -
C++ Primer Plus 书之--C++ 嵌套类(内部类), 嵌套类访问权限
嵌套类在C++中, 可以将类声明放在另一个类中. 在另一个类中声明的类被称为嵌套类(nested class), 它通过提供新的类型类作用域来避免名称混乱. 包含类的成原函数可以创建和使用被嵌套类的对象; 而仅当声明位于共有部分, 才能在包含类的外面使用嵌套类, 而且必须使用作用域解析运算符.对类进行嵌套和包含并不同, 包含意味着将类对象作为另一个类的成员, 而对类进行嵌套不创建类成员, ...原创 2018-12-28 23:09:50 · 8139 阅读 · 0 评论 -
C++Primer Plus书之--C++动态内存和类, 复制构造函数和赋值运算符
从一个例子开始:// 第一个文件// stringbad.h#include <iostream>#ifndef STRINGBAD_H_#define STRINGBAD_H_class StringBad{private: // 指向字符串的指针 char * str; // 字符串的长度 int len; static int num_string...原创 2018-12-13 23:39:41 · 303 阅读 · 0 评论 -
C++ Primer Plus书之--C++函数模版及模板重载
函数模板函数模板允许以任意类型的方式来定义函数, 例如:可以这样建立一个交换模板(交换两个参数的数值)// 建立一个模板, 并将类型命名为AnyType, 关键字template是必须的// 类型名AnyType可以任意选择, 只要遵守C++命名规则即可. 例如T.// typename也是必须的, 但是可以用class进行替换template <typename AnyTy...原创 2018-12-04 09:42:00 · 323 阅读 · 0 评论 -
c++ primer Plus书--C++枚举和switch, cin/cout读/写文件
C++中switch和枚举结合使用:#include "iostream"using namespace std;// 创建一个枚举类型常量, 实际对应的是0~2enum {red, orange, yellow};int main() { cout << "Enter color code (0~2)"; int code; cin >> code...原创 2018-11-25 19:06:38 · 396 阅读 · 0 评论 -
C++ premier Plus书之--C++的cctype介绍
看一个对cctype中主要方法的介绍的例子:#include "iostream"#include "cctype"using namespace std;int main() { cout << "Enter text for analysis, and type @ to terminate input " << endl; char ch; int...原创 2018-11-22 22:49:52 · 510 阅读 · 0 评论 -
C++ primer Plus书之--C++之cin.get介绍, 二维数组
看个简单的例子 #include "iostream"using namespace std;int main() { char ch; int count = 0; cout << "Enter characters; enter # to-quit" << endl; cin >> ch; while (ch != '#') { ...原创 2018-11-22 22:35:59 · 1053 阅读 · 0 评论 -
C++ primer Plus书之—C++指针,数组,指针算术
首先看一下c++里的动态创建数组int* p_array = new int[10];new运算符返回第一个元素的地址, 也就是会把数组的第一个元素的地址赋给指针p_array当使用完new分配的内存时, 应该使用delete来释放他们:delete[] p_array;注意new分配内存的时候如果是[], delete的时候也需要加[]动态创建数组相比与静态创建数组的...原创 2018-11-19 23:33:46 · 296 阅读 · 0 评论 -
c++ primer Plus书之for, while循环, 逗号运算符, 字符串比较
// for循环#include "iostream"const int arSize = 16;int main() { using std::cout; using std::endl; long long factorials[arSize]; factorials[0] = factorials[1] = 1; for (int i = 2; i < arSiz...原创 2018-11-21 23:03:03 · 480 阅读 · 0 评论 -
C++ primer Plus书之--C++指针及使用new分配内存,使用delete释放内存
先来个简单的程序初步认识一下指针 #include <iostream>using namespace std;int main() { // 定义一个int型变量 int num = 123; // 定义一个int型指针变量 int * p_num; // 指针指向num的地址 p_num = &num; cout << "num =...原创 2018-11-19 12:18:32 · 1596 阅读 · 0 评论 -
C++ primer Plus书之--C++指针, 数组, 结构体, 字符串
指针和字符串, demo:#include "iostream"#include "cstring"using namespace std; int main() { char animal[20] = "bear"; // 字符常量指针, 也就是bird指向的内存时不允许修改的 const char* bird = "wren"; ...原创 2018-11-20 22:59:23 · 229 阅读 · 0 评论 -
C++ primer Plus书之--C++字符串
首先类似c语言里的字符串:// 数组长度11实际上已经把字符串结尾的\0字符考虑进去了char bird[11] = "Mr. Cheeps";// 让编译器自己判断字符串的长度char fish[] = "Bubbles";假如有如下代码:char boss[8] = "Bozo";虽然长度是8实际上之后前五位有效也就是B,o,z,o,\0(表示字符串结尾)这五位后三位...原创 2018-11-14 23:47:53 · 154 阅读 · 0 评论 -
C++ primer Plus书之---C++数组
先看下面的代码#include "iostream"using namespace std;int main() { int cards[4] = {1, 2, 3, 4}; int hand[4]; hand[4] = {2, 3, 4, 5}; hand = cards;}运行结果如下:首先hand[4]表示的是数组的第5个元素(下标从0开始)而不是表示声明长度为...原创 2018-11-14 20:19:52 · 213 阅读 · 0 评论