C++
糖醋饺子
这个作者很懒,什么都没留下…
展开
-
C++之异常处理
引言异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题。而传统错误处理技术,检查到一个局部无法处理的问题时:1.终止程序(例如atol,atoi,输入NULL,会产生段错误,导致程序异常退出,如果没有core文件,找问题的人一定会发疯)2.返回一个表示错误的值(很多系统函数都是这样,例如malloc,内存不足,分配失败,返回NULL指针)3.返回一个合法值,让程序处于某种非法的状态(最坑爹的东西,有些第三方库真会这样)4.调用一个预先准备转载 2015-12-10 11:39:25 · 232 阅读 · 0 评论 -
C++重载解析
1何时应用重载解析重载解析可以看作是函数调用整个完整处理过程的一部分。首先,如果是通过指针或者成员函数指针来进行调用,就不会进行重载解析:因为究竟调用哪一个是在运行期由指针(实际所指的对象)来决定的。另外,类似函数的宏不能被重载,因此就不会进行重载解析。2简化过的重载解析重载解析通过比较调用实参和候选参数的匹配程度,来对所有的可行候选函数进行分级,对于匹配级别高的候选函数,它每个参数的匹配程度都不能低于匹配级别低的候选函数的相应参数的匹配程度。下面的例子说明了这一点:[cpp] view plain转载 2015-12-08 09:38:16 · 170 阅读 · 0 评论 -
C++ 之Template
模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。函数模板在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下:void swap(int&a , int& b) { int temp = a; a = b; b = temp;}但是如果是要支持long,string,自定义class的swap函数,代码和转载 2015-12-08 10:32:10 · 185 阅读 · 0 评论 -
C++class总结
一、C++类的定义 C++中使用关键字 class 来定义类, 其基本形式如下:class 类名{public://公共的行为或属性 private://公共的行为或属性}; 示例: 定义一个点(Point)类, 具有以下属性和方法: ■ 属性: x坐标, y坐标 ■ 方法: 1.设置x,y的坐标值; 2.输出坐标的信息。实现代码:class Point{public: void setPoint(int x, int y);转载 2015-12-08 10:29:55 · 336 阅读 · 0 评论 -
C++之inline和define
内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。 我们可以用Inline来定义内联函数,不过,任何在类的说明部分定义的函数都会被自动的认为是内联函数。 下面我们来介绍一下内联函数的用法。 内联函数必须是和函数体申明在一起,才有效。像这样的申明Inline Tablefun原创 2015-12-07 14:28:19 · 224 阅读 · 0 评论 -
C++之 初始化列表的作用
与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。struct foo{ string name ; int id ; foo(string s, int i):name(s), id(i){} ; // 初始化列表};构造函数的两个执行阶段构造函数的执行转载 2015-12-08 13:47:51 · 1878 阅读 · 1 评论 -
getline()函数详解
学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”。书上给的程序如下:int main(){ string line: while(getline(cin,line)) cout<<line<<endl; return 0;}大家会发现运行时怎么也跳不出循环,甚至会发生各种莫名其妙的错误。这是为什么呢?在这里我给大家做一个详细的讲解。首先给大家介绍一下getline()转载 2015-12-07 13:59:03 · 270 阅读 · 0 评论 -
浅谈C++中指针和引用的区别
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。1.指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。而下面2句定义了一个整形转载 2015-12-07 14:40:16 · 154 阅读 · 0 评论 -
C++管理数据内存方式
C++有三种管理数据内存的方式:自动存储、静态存储、动态存储。自动存储 函数内部定义的常量使用自动存储空间,存储在栈中,称为自动变量(局部变量)。即所属的函数被调用时自动产生。静态存储 静态存储是整个程序执行期间都存在的存储方式。使变量成为静态变量的方式有2种: 函数外定义,static定义动态存储 new,delete管理内存池(堆)。原创 2015-12-04 17:02:41 · 169 阅读 · 0 评论 -
::在C++中是什么意思
::在C++中是什么意思::是运算符中等级最高的,它分为三种:1)global scope(全局作用域符),用法(::name)2)class scope(类作用域符),用法(class::name)3)namespace scope(命名空间作用域符),用法(namespace::name)他们都是左关联(left-associativity)他们的作用都是为了更明确的调用你想要的变量,如在程序中的某一处你想调用全局变量a,那么就写成::a,如果想调用class A中的成员变量a,那么就写成原创 2015-12-04 16:15:44 · 717 阅读 · 0 评论 -
C++ 输入函数getline(cin,str) 与cin.getline(str,int)区别
cin.getline()函数是处理数组字符串的,其原型为cin.getline(char * , int),第一个参数为一个char指针,第二个参数为数组字符串长度。getline(cin,str)函数是处理string类的函数。第二个参数为string类型的变量。实例:#include <iostream>#include <string>using namespace std;const int SIZE=20;int main(){string str;cout<<"strin转载 2015-12-04 11:08:05 · 378 阅读 · 0 评论 -
C++之虚函数表
C++中的虚函数的实现一般是通过虚函数表(C++规范并没有规定具体用哪种方法,但大部分的编译器厂商都选择此方法)。类的虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址。注意的是,编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。类的每个虚成员占据虚函数表中的一行。如果类中有N个虚函数,那么其虚函数表将有N*4字节的大小。虚函数(Virtual Function)是通过一张虚函数表来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表转载 2015-12-17 15:43:01 · 149 阅读 · 0 评论 -
C++之抽象类和接口的区别
抽象类和接口的区别: 1.接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什 么。比如,男人,女 人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人人可以吃东西,狗也可以吃东西, 你可以把“吃 东西”定义成一个接口,然后让这些类去实 现它.所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时 是生物和非生物),但 是可以实现多个接口(吃饭接口、走路接转载 2015-12-10 10:23:03 · 188 阅读 · 0 评论 -
C++文件操作:读取文件字符数
打开一个文件,逐个字符读取文件,直到文件末尾,然后指出该文件中包含多少个字符。#include #include #include using namespace std;int main(){ ifstream file; file.open("zs.txt"); if (!file.is_open())//is_open()判断前面是否调用了open(),打开成功原创 2015-12-28 09:50:20 · 1172 阅读 · 0 评论 -
C++之typedef用法详解
第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的转载 2015-12-11 14:07:18 · 179 阅读 · 0 评论 -
C++之 虚析构函数 的作用
在C++程序开发时,用作基类的类的析构函数一般要定义为虚函数,为什么要这样做呢?先看一个例子,代码如下:#include <iostream>using namespace std; class A //定义基类{public: //构造函数 A(){cout<<"A class is Constructed"<<endl;} //虚析构函数 virtual ~A(){cout<<"A class is deconstructed"<<endl;} //转载 2015-12-10 13:41:10 · 155 阅读 · 0 评论 -
C++之运算符、操作符重载
所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。运算符也可以重载 ..运算符重载是对已有的运算符赋予多重含义... // 也就是说重载完之后,会根据我们定义的重载函数 自动调用最符合调用的方法使用...比如我们定义的类的重载运算符+. 当我们使用类的对象相加时,会自动调用我们定义的重载...而当我们使用内置的+法运算,比如 int b=5+3; 那么这是还是调用内置的+法运算进行处理 ..C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于原创 2015-12-09 11:21:35 · 225 阅读 · 0 评论