C++基础
文章平均质量分 57
zuoyefeng1990
这个作者很懒,什么都没留下…
展开
-
《高质量C++编程指南》摘录2
注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针如7-3-3(b)中,不论数组 a的容量是多少,sizeof(a)始终等于 sizeof(char *)。 char a[] = "hello world"; char *p = a; cout cout示例 7-3-3(a) 计算数组和指针的内存容量 void Func(cha原创 2016-08-10 11:00:39 · 277 阅读 · 0 评论 -
《高质量C++编程指南》摘录3
用函数返回值来传递动态内存这种方法虽然好用,但是常常有人把 return 语句用错了。这里强调不要用 return 语句返回指向“栈内存”的指针,因为该内存在函数结束时自动消亡。但是!堆内存是可以的哦!因为堆内存是自己管理释放的!以下是错的:char *GetString(void) { char p[] = "hello world"; return p; // 编译器将原创 2016-08-10 11:21:34 · 241 阅读 · 0 评论 -
《高质量C++编程指南》摘录4
7.5 free 和 delete 把指针怎么啦? 别看 free 和 delete 的名字恶狠狠的(尤其是 delete) ,它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。 --------所以释放内存后要记得释放指向这片内存的指针。(1)指针消亡了,并不表示它所指的内存会被自动释放。 (2)内存被释放了,并不表示指针会消亡或者成了 NULL 指针。原创 2016-08-10 11:36:03 · 292 阅读 · 0 评论 -
《高质量C++编程指南》摘录5
7.8 有了 malloc/free 为什么还要 new/delete ? 我们不要企图用 malloc/free 来完成动态对象的内存管理,应该用 new/delete。由于内部数据类型的 “对象” 没有构造与析构的过程, 对它们而言 malloc/free和new/delete是等价的。 既然 new/delete 的功能完全覆盖了 malloc/free,为什么 C++原创 2016-08-10 11:41:29 · 377 阅读 · 0 评论 -
《高质量C++编程指南》摘录6
8.2 成员函数的重载、覆盖与隐藏 成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。 8.2.1 重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中) ; (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是:原创 2016-08-10 14:06:44 · 280 阅读 · 0 评论 -
《高质量C++编程指南》摘录7
8.4 运算符重载 8.4.2 不能被重载的运算符 在 C++运算符集合中,有一些运算符是不允许被重载的。这种限制是出于安全方面的考虑,可防止错误和混乱。 (1)不能改变 C++内部数据类型(如 int,float等)的运算符。 (2)不能重载‘.’,因为‘.’在类中对任何成员都有意义,已经成为标准用法。 (3)不能重载目前 C++运算符集合中没原创 2016-08-10 14:28:54 · 223 阅读 · 0 评论 -
位拷贝、值拷贝、浅拷贝、深拷贝
位拷贝拷贝的是地址(也叫浅拷贝),而值拷贝则拷贝的是内容(也叫深拷贝)。如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数现将 a赋给 b,缺省赋值函数的“位拷贝”意味着执行 b.m_data = a.m_data。这将造成三个错误:一是 b.m_data 原有的内存没被释放,造成内存泄露;二是b.m_data 和 a.m_data 指向同一块内存,原创 2016-08-10 15:35:52 · 690 阅读 · 0 评论 -
《高质量C++编程指南》摘录8
9.8 如何在派生类中实现类的基本函数 基类的构造函数、析构函数、赋值函数都不能被派生类继承。如果类之间存在继承关系,在编写上述基本函数时应注意以下事项: 派生类的构造函数应在其初始化表里调用基类的构造函数。 基类与派生类的析构函数应该为虚(即加 virtual 关键字)。 在编写派生类的赋值函数时,注意不要忘记对基类的数据成员重新赋值。原创 2016-08-10 16:18:02 · 302 阅读 · 0 评论 -
《高质量C++编程指南》摘录9
11.1.1 用 const 修饰函数的参数 如果输入参数采用“指针传递” ,那么加 const修饰可以防止意外地改动该指针,起到保护作用。如果输入参数采用“值传递” ,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加 const 修饰。对于非内部数据类型的参数而言,象 void Func(A a) 这样声明的函数注定效率比较底。因为函数体内将产生 A原创 2016-08-10 16:45:14 · 359 阅读 · 0 评论 -
关于DLL中new在主程序中释放的问题
首先软件运行调用dll,是将dll中的模块加入主程序中运行,而不是单独运行,dll new一个类 将这个类的指针返回给主程序,这时候主程序接管这块内存的,用完后所以要对这个类所占的内存进行释放,这和通过调用dll里面释放是一个道理 。原创 2016-08-12 17:47:49 · 784 阅读 · 0 评论 -
static_cast与dynamic_cast转换
3.1 static_cast用法:static_cast ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成子类表示)时,由于原创 2017-05-05 09:05:00 · 452 阅读 · 0 评论 -
C++11 标准新特性:Defaulted 和 Deleted 函数
本文将介绍 C++11 标准的两个新特性:defaulted 和 deleted 函数。对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量。对于 deleted 函数, 编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性。本文将通过代码示例详细阐述 defaulted 和 delet转载 2017-06-19 16:48:26 · 287 阅读 · 0 评论 -
深入分析C++引用
转自:http://blog.csdn.net/webscaler/article/details/6577429关于引用和指针的区别的文章很多很多,但是总是找不到他们的根本区别,偶然在codeproject上看到这篇文章,觉得讲的挺好的,所以翻译了下,希望对大家有帮助。原文地址: http://www.codeproject.com/KB/cpp/References_in_c__.转载 2016-08-10 10:31:17 · 227 阅读 · 0 评论 -
《高质量C++编程指南》部分摘录
【规则6-1-4】如果输入参数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。原创 2016-08-09 17:18:12 · 279 阅读 · 0 评论 -
虚函数和纯虚函数的作用与区别
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};void Move();pr转载 2015-09-09 11:54:19 · 404 阅读 · 0 评论 -
C++ Boost库分类总结
按照实现的功能,Boost可为大致归入以下20个分类,在下面的分类中,有些库同时归入几种类别。字符串和文本处理库a) Conversion库:对C++类型转换的增强,提供更强的类型安全转换、更高效的类型安全保护、进行范围检查的数值转换和词法转换。b) Format库:实现类似printf的格式化对象,可以把参数格式化到一个字符串,而且是完全类型安全的。c) IOStream原创 2016-01-13 09:40:27 · 4433 阅读 · 0 评论 -
【总结】C++ 出现内存问题
C++里可能出现内存问题基本上出自这几个方面:1.缓冲区溢出(buffer overrun)。2.空悬指针、野指针。3.重复释放(double delete)。4.内存泄漏(memory leak)。5.不配对的 new[]/delete。6.内存碎片(memory fragmentation)。解决思路:1.缓冲区溢出:用std::vector/std::stri原创 2016-01-13 11:53:49 · 594 阅读 · 0 评论 -
高性能服务端编程知识点导图-摘录
原创 2016-01-13 15:36:31 · 281 阅读 · 0 评论 -
atoi 和 itoa实现
#includeint atoi(const char *str){ int value=0; bool b_plus=true; //判断符号 switch(*str) //过滤符号 { case '+': str++; break; case '-': b_plus=false;转载 2016-03-05 11:28:17 · 307 阅读 · 0 评论 -
STL之Vector
#include #include#include#includeusing namespace std;int main(){ vector V; string tmp; for (int i = 0; i < 5;i++) { getline(cin, tmp); V.push_back(tmp); } sort(V.begin(), V.end()); c原创 2016-03-05 13:18:20 · 263 阅读 · 0 评论 -
C++二分查找法
#include using namespace std;//非递归查找int BinarySearch(int *array, int aSize, int key){ if ( array == NULL || aSize == 0 ) return -1; int low = 0; int high = aSize - 1; int转载 2016-03-05 15:20:38 · 382 阅读 · 0 评论 -
C++ string类实现
#includeusing namespace std;class String{public: String(const char *str = NULL); String(const String &other); ~String(void); String & operator=(const String &other); bool operator==(const St转载 2016-03-05 16:18:52 · 305 阅读 · 0 评论 -
关于C++虚函数表实例
#include using namespace std;class Base{public: virtual void fun1() { cout << "Base::fun1" << endl; } virtual void fun2() { cout << "Base::fun2" << endl; } virtual void fun3() { cout << "Base:原创 2016-02-20 20:07:15 · 318 阅读 · 0 评论 -
关于重载具体细节
1.运算符重载定义: C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运转载 2016-03-24 23:58:53 · 301 阅读 · 0 评论 -
关于OPENSSL在WINDOWS下编译和使用的坑
因为最近使用OPENSSL 编译使用RSA做开发,但是出现了各种问题。找了网上资源整合一下,不过还是有问题啊,在多次试验中终于找到了方法原创 2016-06-03 14:34:37 · 5424 阅读 · 1 评论 -
C++著名类库
http://www.open-open.com/solution/view/13234015583741、C++各大有名库的介绍——C++标准库 2、C++各大有名库的介绍——准标准库Boost 3、C++各大有名库的介绍——GUI 4、C++各大有名库的介绍——网络通信 5、C++各大有名库的介绍——XML 6、C++各大有名库的介绍——科学计算 7、C++各大转载 2016-06-29 16:21:18 · 354 阅读 · 0 评论 -
值得学习的C语言开源项目
值得学习的C语言开源项目WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/~cz2105...转载 2018-05-24 09:40:50 · 498 阅读 · 0 评论