自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 C++类之const

因为C++中多了类,那么const也不仅仅局限于修饰普通变量,而且扩展到了类中。 1.const修饰成员数据 const修饰成员数据跟修饰普通变量是一样的,一旦被const修饰,就不能修改。2.const修饰成员函数 const可以修饰成员函数,首先要知道const所放的的位置,在声明之后,函数体之前,如果声明与定义分开,则不管声明还是定义都要有const。例如:class A{public

2016-05-31 21:48:49 376

原创 C++之对象的new与delete

这里单独说一点对于类对象的new和delete中到底开辟的是哪段空间,释放的是哪段空间。 还是一样举个例子:class A{private: char* str;public: A(){ str = new char[100]; } ~A(){ delete []str; }};int main(){ A

2016-05-31 20:17:51 438

原创 C++之类对象的返回与引用

一、类对象的返回 在拷贝构造器中提到过:class A{};A func(A a){ return a;}int main(){ A x; func(x);}调用func(a)中参数的传递本质是调用拷贝构造器的发生,将实参x拷贝给形参a中。A func(A &a){ return a;}int main(){ A x; func(x);}这

2016-05-30 11:19:28 12173 1

原创 C++值赋值运算符重载

C++值赋值运算符重载的格式是这样的:类名 & operator(const 类名 & 对象名){ 拷贝体}同拷贝构造函数一样,若没有定义赋值运算符重载,则编译器会自动生成一个默认的赋值运算符重载, 编译器自动生成默认赋值运算符重载同样是等位赋值,也就是浅拷贝,会造成内存泄漏和重析构。重析构就不用说了,跟拷贝构造函数一样。 那为什么会内存泄漏呢?还是举个例子加画个图来说明:class A

2016-05-28 20:01:12 1366 2

原创 C++之函数调用的返回值

函数调用中的返回值是放在一个临时变量中的,这个临时变量可能存在于寄存器中,也可能在栈中预先分配的一段空间中(因为编译器根据函数拥有返回值会预先分配空间),函数返回时,再把临时变量的值拿出来,放到应赋给的值所在的空间中(如果有赋值的话)。举个例子:int getnum(){ int a = 5; return a; }int main(){ int num = 1;

2016-05-28 19:45:40 3495

转载 float类型在内存中的表示

先说一下计算机中二进制的算法: 整数 : 整数的二进制算法大家应该很熟悉,就是不断的除以2取余数,然后将余数倒序排列。 小数 : 小数的二进制算法和整数的大致相反,就是不断的拿小数部分乘以2取积的整数部分,然后正序排列。比如求0.9的二进制: 0.9*2=1.8 取 1 0.8*2=1.6 取 1 0.6*2=1.2 取 1 0.2*2=0.4 取 0 0.4*2=0.8 取

2016-05-27 19:47:27 492

原创 C++之拷贝构造器

为什么叫拷贝构造器不叫拷贝构造函数就不重复说了,构造器部分有说明。拷贝构造器的格式如下:类名(const 类名 & another){}即是用一个已经存在的对象去创建一个不存在的对象,编译器也会生成一个默认的拷贝构造器,默认拷贝构造器是浅拷贝,如果自定义了拷贝构造器,那么编译器便不会自动生成拷贝构造器,比如:class A{private: char *str;public: A

2016-05-26 07:54:54 511

原创 C++类之构造器和析构器

虽然平时我们都叫构造函数和析构函数,但他们并不像真正的函数一样,不管是构造还是析构两个都没有返回值,所以最好称他们为构造器和析构器。基础就不说了,下面分别说一下这两个东西中容易被忽视的东西:一、构造器 1.我们知道构造器若没有定义,编译器会自动生成一个默认无参的构造器,一旦自定义了构造器,那么就不再会有自动生成,一般情况下最好自定义中带有无参的构造器,不然bug是不可避免的,建议是定义带默认参数的

2016-05-25 07:39:40 3679 2

原创 网络编程之listen与bind

今天根据《Unix 网络编程》(卷1)第四章的4.4和4.5的习题要求:尝试把服务端的listen和bind分别去掉,看看会发生什么 首先把listen去掉,然后我发现我竟然这么做了,开始真是吓死,屏幕一直滚,不断地刷屏啊,因为我让服务端打印来自客户端的套接字、ip地址和端口信息,一直刷的是: “client_fd : -1 ,IP: 220.241.101.0, port is 0” 这么一

2016-05-23 11:20:34 1346

原创 内存释放错误

今天遇到了两次内存释放错误,不一样的情形导致的,但出现的错误提示是一样的。如图: 第一次的内存错误代码是这样的struct StackNode{ int element; StackNode* next;};StackNode* s = (StackNode*)malloc(sizeof(StackNode*)); free(s);内存释放错误因为内存空间分配时出错了,应该是

2016-05-22 17:25:49 771

原创 C++之命名空间

命名空间的目的主要是为了解决大项目数人开发时的变量名冲突问题。例如:using namespace std;相当于打开了std的包裹,若没有using namespace std; 使用cin或者cout必须前面加std::的格式。 自定义命名空间:namespace Space{ int x; int y; namespace Other{ //此时的Other相当

2016-05-21 21:01:15 312

原创 C++之类型转换

一、static_cast类型转换 static_cast 应用于c++可以隐式转换的类型之间,包括双向隐式转换和单向隐式转换。 例如: 双向隐式转换:int a;char b;a = static_cast<int>(b); //可以直接通过隐式转换,转换类型:a = bb = static_cast<float>(a); //可以直接通过隐式转换,转换类型:b = a单向隐式转换

2016-05-21 18:27:54 270

原创 C++之引用

引用相当于给变量起个别名,并不分配内存空间,C++中话是这么说,但实际上这个引用就相当于C语言中的指针,实际是开辟了4字节的空间,与开辟指针大小的空间相同,且指向变量的地址。引用相当于指针,其引用的大小与指针大小相同,但当打印sizeof时,打印出的就是变量的大小,这就是C++中做的一种蒙蔽。例如:int a = 200;int &ra = a;ra = 300; //ra可以修改值int

2016-05-19 20:10:01 271

原创 C++对C扩展之默认参数(default)

默认参数的规则:1.必须从右到左进行默认,不能跳跃2.实参的个数 + 默认形参个数 >= 所有形参个数注意:对于一个参数或两个参数都能实现的函数,可以使用默认参数,也可以使用重载,但不能同时使用。例如:int print(int a){cout }int print(int a, int b = 10){cout }int

2016-05-18 21:37:17 795

原创 C++对C的扩展之函数重载

C语言不支持函数重载,若出现同名函数,不管参数个数,类型,顺序是否不同,一律定为冲突C++支持函数重载,其特点:1.  函数名相同2.参数类型,个数,顺序不同函数重载与返回类型无关函数重载调用规则:1.完全类型匹配2.若不存在完全类型匹配,则使用隐式类型匹配原则注意:int 到long , double 存在二义性, float 到int, double 同

2016-05-18 18:40:39 791

原创 C++对C的扩展之cin与cout

using namespace std;int main(){// char name[30];// scanf("%s", name); //不安全// printf("name = %s\n", name);// gets(name);

2016-05-16 22:28:14 487

原创 C++对C的扩展之运算符

C语言等号运算符的左边不允许为表达式//C语言#includeenum BOOL{    FALSE, TRUE};int main(){    int a, b = 5;    (a = b) = 100;  //编译出错    printf("a = %d, b = %d\n", a, b);}C++语言等号运算符

2016-05-16 21:50:55 570

原创 C++对C的扩展之枚举类型enum

C语言的enum类型不是真正的枚举,可以赋予枚举里面的值,也可以赋其他值。C++中的enum只能赋予枚举里面的值,赋予其他值编译报错且enum里的值若为赋值,则第一个值默认为0,后面值依次加1,若enum里的值赋予了值,后面未赋值,则后面从前一值开始依次加1。

2016-05-16 20:02:04 2125

原创 C++对C的扩展之bool(布尔类型)

C语言不存在bool类型,C语言中的真用0表示,假用非0值表示,上面通过枚举类型enum自定义一个布尔类型。 运行结果如下:注意:针对C语言中的enum定义,在使用时,必须加enum BOOL才能使用,而在C++中可以直接使用BOOL。

2016-05-16 19:41:07 2465 2

原创 C++对C的const扩展

//C语言#includeint main(){    const int a = 10;    int *p = &a;   //明修栈道,暗度陈仓,实际可以通过*p对a进行修改,C的const不是真正的const    *p = 100;    printf("a = %d\n", a);   //a输出100}//C++语言#include

2016-05-16 19:10:41 398

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除