C/C++
文章平均质量分 76
WhiteJunior
这个作者很懒,什么都没留下…
展开
-
C++:异常、名字空间、预处理指令
异常当一个异常被抛出后,C++的运行时支持系统“在调用栈中向上”搜索与抛出对象类型匹配的catch子句,即查找抛出异常的函数中的try语句,然后在抛出异常的函数的调用者中查找,再在更上层的调用者中查找,依次类推,直到找到匹配的catch语句。 如果找不到匹配的catch子句,程序就会终止。在搜索过程中遇到的每个函数中,以及每个作用域中,都会调用析构函数进行清理工作,这个过程被称为堆栈解退(s...原创 2018-04-25 14:55:13 · 243 阅读 · 0 评论 -
C++:模板
模板模板(template)是一个类或者一个函数,以一组类型或/和整数为参数:template<typename T>class vector{public: //... int size() const;private: int sz; T* p;};template <class T>int vector<T...原创 2018-04-24 15:21:13 · 161 阅读 · 0 评论 -
C++:类的相关知识点3
默认操作当定义一个类时,编译器可能为类的对象定义以下几个默认操作:默认构造函数拷贝操作(拷贝赋值和拷贝初始化)移动操作(移动赋值和移动初始化)析构函数 这些(默认)操作都会递归地对类的每个基类和成员进行操作。 构造是“自底向上”进行的。即先构造基类,再构造成员。 析构是“自顶向下”进行的。即先析构成员,再析构基类。 成员和基类是按它们在声明中出现的顺序构造的,按相反的顺序销...原创 2018-04-23 13:24:15 · 191 阅读 · 0 评论 -
C++:类的相关知识点2
虚函数虚函数是一种成员函数,它是一种成员函数,它为派生类中具有相同名字,接受相同参数的函数定义了一个一致的调用接口。 当调用一个虚函数时,实际被调用的是对应派生类中的函数。 在派生类中定义与基类中虚函数名字和参数相同的函数,产能为虚函数被覆盖(override)。class Shape(){public: virtual void draw(); //virtual...原创 2018-04-22 19:52:25 · 213 阅读 · 0 评论 -
C++:类的相关知识点1
this指针如果希望在成员函中显式引用所用对象,可以使用预定义的指针this。 eg: struct Date{ int d,m,y; int month() const {return this->m; }友元函数我们可以通过friend声明来授予独立函数访问所有类成员的权限。 类的友元函数是定义在类外部,但有权访问类的所有私有(private...原创 2018-04-14 21:31:01 · 216 阅读 · 0 评论 -
类相关的技术细节 -15
参数类型定义枚举型变量:enum class Month{ jan = 1, feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec };需要注意的是,在使用时,以 Month::mar 来进行使用而不是 Month.mar 因为Month不是一个对象,而是一个类型。mar也不是一个数据成员,而是一个枚举量,一个符号常量。...原创 2017-11-06 14:44:37 · 179 阅读 · 0 评论 -
类相关的技术细节 -14
枚举类型 枚举(enum): 它指定一个值的集合,这些值用符号常量来表示,称为枚举量。enum class Month{ jan=1,feb,mar,apr,may,jun,jul,aug,sep,oct,npv,dec };可以自定义进行对枚举量进行定义,也可以不指定。如果不指定,则编译器将赋予每个枚举量的值为上一个枚举量的值加1. 如果不对第一个枚举量进行...原创 2017-11-03 15:40:54 · 198 阅读 · 0 评论 -
函数相关的技术实现 -12
表达式计算 如果需要在表达式中改变一个变量的值,不要再同一个表达式中在读取或写入这个变量。 以下代码均有隐患(未定义的计算顺序)v[i] = ++i;v[++i] = i;int x = ++i+ ++i;cout<<++i<<''<<i<<'\n';f(++i,++i);全局初始化 一个静态的局部变量只有在函数首次调...原创 2017-10-29 19:46:20 · 187 阅读 · 0 评论 -
类相关的技术细节 -13
类和成员 一个类就是一个用户自定义类型,由一些内置类型、其他用户自定义类型以及一些函数所组成。 用来定义类的组成部分称为成员。一个类可以有零个或多个成员。class X{public: int m;//数据成员 int mf(int v) {int old = m; m = v; return old;}//函数成员 };类成员的访问使用符号objec...原创 2017-11-01 15:53:22 · 225 阅读 · 0 评论 -
错误 -7
随机数的设置与产生: 这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。首先我们要在宏定义中定义一个函数:#define random(x) (rand()%x)然后再主函数中,我们首先定义一个整数n(由用户来输入) 然后调用srand函数,这里的n我们称之为种子(seed)。... cin...原创 2017-10-15 16:23:09 · 1382 阅读 · 0 评论 -
错误 -6
前置条件与后置条件: 前置条件 函数对自己参数的要求被称为前置条件。后置条件 对函数的返回值进行检查。有意思的一道题: 找出int所能允许表示的最大的斐波那契数: 利用limits头文件:#include<iostream>#include<string>#include<vector>#include<algorithm&...原创 2017-10-15 15:31:06 · 272 阅读 · 0 评论 -
错误 -5
1.链接时出错 在调用未定义的函数时会出错的。而具有相同名称但是类型不同的函数并不会被匹配。比如如果我们需要: int area(int x,int y) { … } 则double area(double x,double y){…} 和int area(char x,char y){…}都是不会被匹配的。2.异常 基本思想:把错误检测(在被调函数中完成)和错误处...原创 2017-10-14 22:49:14 · 736 阅读 · 0 评论 -
C++ Re-Study
买了C++的书本,重新对C++进行学习#include<iostream>#include<string>#include<vector>#include<algorithm>#include<cmath>using namespace std;inline void keep_window_open() { char...原创 2017-10-11 14:05:40 · 615 阅读 · 0 评论 -
对象、类型和值-1
cout<<....cin>>....字符串的连接:full_name = first_name + " " + last_name;//所连接也要是两个字符串检测输入的字符是否是重复字符:string previous = ""; string current; while (cin >> current) ...原创 2017-10-11 15:18:13 · 224 阅读 · 0 评论 -
计算 -2
继续对C++进行学习,第四章《计算》目标: - 正确 - 简单 - 高效1. 常量表达式constexpr double pi = 3.14;//定义一个**不可修改**的常量一个constexpr符号常量必须给定一个在编译时就已知的值,例如:constexpr int max = 100;void use(int n){ constexp...原创 2017-10-12 19:41:05 · 218 阅读 · 0 评论 -
计算 -3
埃拉托色尼筛法求素数:这是最简单朴素的素数筛法了,根据wikipedia,时间复杂度为 O(n \log\log n),空间复杂度为O(n)。 算法思想:先假定所有的数都是素数,然后从最小的素数2出发,把素数的所有倍数筛出去。又因为一个数的质因数都是成对出现的,比如100 = 1*100 = 2*50 = …..= 10*10,所以筛素数时只用筛到 n的开平方就行了。以下为C++...原创 2017-10-13 22:10:07 · 293 阅读 · 0 评论 -
计算 -4
稍有意义的一道题: 要求输入一组字符串,找出其中的最大和最小的字符串,并找出其中出现次数最多的字符串mode。思路: 输入完成后,先对字符串进行排序,然后做前后比较。#include<iostream>#include<string>#include<vector>#include<algorithm>#include<...原创 2017-10-14 13:57:16 · 301 阅读 · 0 评论 -
编写一个程序 -8
计算器程序 对于计算的优先级问题,如何从输入读取包括数字和操作符在内的表达式的方法,并以一种合理的方式进行存储? 分词(tokenize):读取输入字符并组合成单词(token) 单词可以看做一个单元的一个字符序列,例如数字或者运算符。 利用(kind,value)的形式来表示单词,其中kind表示单词是一个数字、运算符还是括号。value所保存的为值(比如如果是数字那么就是数值)如何...原创 2017-10-15 21:27:33 · 360 阅读 · 0 评论 -
编写一个程序(计算器的程序实现) -9
继续编写的计算器程序:#include&lt;iostream&gt;#include&lt;string&gt;#include&lt;vector&gt;#include&lt;algorithm&gt;#include&lt;cmath&gt;#include&lt;limits.h&gt;原创 2017-10-20 14:35:08 · 4387 阅读 · 0 评论 -
函数相关的技术细节-10
声明和定义 声明:将名字引入作用域,为命名实体(变量,函数等)指定一个类型。同时也可以进行初始化。 在C++中,所有的名字都必须先声明才能使用。 定义:对声明的实体的完整描述对变量来说,声明仅仅提供了类型,只有定义才能提供对象(存储空间)。 对函数来说,声明也只是提供了类型(参数类型和返回类型),只有定义才提供函数体。C++规范要求名字在使用前需要定义,因此很多时候我们要用到前...原创 2017-10-22 10:28:16 · 183 阅读 · 0 评论 -
函数相关的技术细节 -11
函数的参数声明与返回值的定义 在函数声明和定义中,可以直接为参数命名,也可以不命名。int my_find(vector<string> vs, int hint); //命名参数int my_find(vector<string> ,int ); //不命名参数,也是可行的同时,声明的参数在函数体中也是可以不去使用的。返回值 对于main函数,...原创 2017-10-28 15:14:44 · 170 阅读 · 0 评论 -
条款01:视C++为一个语言联邦
C、Object-Oriented C++、Template C++、STL原创 2018-06-11 22:48:51 · 1206 阅读 · 0 评论 -
条款02:尽量用const,enum,inline替换#define
尽量用const,enum,inline替换#define原创 2018-06-12 20:14:05 · 472 阅读 · 0 评论 -
条款04(一):确定对象被使用前已经被初始化
将对象初始化,内置类型的初始化,构造函数的初始化,赋值&初始化的区别原创 2018-06-30 14:57:33 · 331 阅读 · 0 评论 -
条款04(二):确定对象被使用前已经被初始化
成员初始化次序、non-local static对象原创 2018-07-01 16:08:55 · 201 阅读 · 0 评论 -
条款03(一):尽可能使用const
const基本用法,STL迭代器中的const、函数中的const原创 2018-06-26 16:45:40 · 240 阅读 · 0 评论 -
条款07(一):为多态基类声明virtual析构函数
Factory函数、Virtual析构函数原创 2018-07-08 21:42:29 · 252 阅读 · 0 评论 -
条款03(二):尽可能使用const
const成员函数、重载、bitwise和logical原创 2018-06-27 11:44:52 · 239 阅读 · 0 评论 -
条款05:了解C++默默编写并调用了哪些函数
编译器暗自生成的default构造函数、copy构造函数、copy assignment操作符、析构函数原创 2018-07-02 15:00:15 · 206 阅读 · 0 评论 -
条款07(二):为多态基类声明virtual析构函数
不要无端将析构函数声明为virtual、pure virtual 析构函数、析构函数的运作原理原创 2018-07-09 21:14:28 · 192 阅读 · 0 评论 -
条款03(三):尽可能使用const
在const和non-const成员函数中避免重复原创 2018-06-28 14:38:04 · 340 阅读 · 0 评论 -
条款08:别让异常逃离析构函数
多个异常的抛出、不要让异常进行传播、给用户提供一个一个处理异常的机会原创 2018-07-16 16:24:22 · 195 阅读 · 0 评论 -
条款09:绝不在构造和析构过程中调用virtual函数
base class中的析构函数、初始化顺序原创 2018-07-18 16:37:29 · 715 阅读 · 0 评论 -
条款12(一):复制对象时勿忘其每一个成分
copying函数、不完全复制原创 2018-07-25 01:31:21 · 339 阅读 · 0 评论 -
条款06:若不想使用编译器自动生成的函数,就该明确拒绝
拒绝拷贝操作,Uncopyable class的定义原创 2018-07-07 22:40:47 · 187 阅读 · 0 评论 -
条款12(二):复制对象时勿忘其每一个成分
derived调用base函数、消除代码重复原创 2018-07-25 14:43:30 · 222 阅读 · 0 评论 -
条款13(一):以对象管理资源
资源、auto_ptr、RAII原创 2018-07-26 21:32:25 · 217 阅读 · 0 评论 -
条款13(二):以对象管理资源
RCSP原创 2018-07-26 23:50:26 · 234 阅读 · 0 评论 -
条款10:令operator= 返回一个reference to *this
连锁赋值原创 2018-07-22 15:16:51 · 467 阅读 · 0 评论 -
条款11(一):在operator= 中处理“自我赋值”
自我赋值原创 2018-07-22 18:41:14 · 332 阅读 · 0 评论