【《Effective C++》笔记:II】教程文章相关的互联网学习教程文章

C++学习笔记之STL标准库(三)vector容器【图】

模板类vector是一个封装了动态大小数组的顺序容器,它所控制的序列是以连续数组的方式存储的。跟任意其它类型容器一样,它能够存放各种类型的对象。包含头文件#include <vector> 声明命名空间using namespace std;特性:  1)顺序序列:容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。  2)动态数组:支持对序列中的任意元素进行快速直接访问。操供了在序列末尾相对快速地添加/删除元素的操...

Item 2:避免使用define Effective C++笔记【代码】

Item 2: Prefer consts, enums, and inlines to #defines 尽量使用常量、枚举和内联函数,代替#define。我们知道#define定义的宏会在编译时进行替换,属于模块化程序设计的概念。宏是全局的,面向对象程序设计中破坏了封装。因此在C++中尽量避免它! 接着我们具体来看#define造成的问题。 不易理解 众所周知,由于预处理器会直接替换的原因,宏定义最好用括号括起来。#define函数将会产生出乎意料的结果:#define MAX(a,b) a>b?a:b...

C++中如何定义函数对象【代码】

尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象。函数对象(也称“算符”)是重载了“()”操作符的普通类对象。因此从语法上讲,函数对象与普通的函数行为类似。用函数对象代替函数指针有几个优点,首先,因为对象可以在内部修改而不用改动外部接口,因此设计更灵活,更富有弹性。函数对象也具备有存储先前调用结果的数据成员。在使用普通函数时需要将先前调用的结果存储在全程或...

C++网络编程(1)——收发一个快递【代码】

从事网络方面的开发有一段时间了,每天在各种琐碎的事情中奔波,对我这种野路子出身的C++程序员,感觉总是欠缺点什么。  终于,思量再三,准备结束这繁杂却无法前进寸步的工作,也暂时给自己一些时间,梳理一下自己摸索网络开发的一些东西,从简单到复杂,一步一步的进阶。希望能让自己更进一步,也希望能帮助一些和我当年一样懵逼的同行们,坚持就是胜利! 下面来看一个简单的示例:server.cpp#include <iostream> #include <Wi...

10行C++代码实现高性能HTTP服务【代码】【图】

前言是不是觉得C++写个服务太累,但又沉迷于C++的真香性能而无法自拔?作为一个老牌C++程序员(可以看我 github 上十几年前的C++项目:https://github.com/kevwan ),这几天听一个好友跟我聊起他写的C++框架,说极简代码即可完成各种C++服务的开发,不禁让我心生好奇!于是我去研究了一下,发现确实有点意思!实战(干货)话不多说,我们来一起看看,10行C++代码怎么实现一个高性能的Http服务,轻松QPS几十万。Linus说:talk is c...

C++标准转换运算符dynamic_cast【代码】【图】

(expression)' ref='nofollow'>dynamic_cast (expression)dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的转换方式来替代。但是也因此它是最常用,最不可缺少的一个运算符。与static_cast一样,dynamic_cast的转换也需要目标类型和源对象有一定的关系:继承关系。 更准确的说,dynamic_cast是用来检查两者...

《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

转载:http://dsqiu.iteye.com/blog/1669614 第一章 关于对象 使用class封装之后的布局成本:class并没有增加成本,data members直接内含在每一个class object之中,就像C struct一样。而member functions虽然被包含在class的声明之内,但是不出现在Object之中。每一个non-inline function 只会产生一个函数实体。至于inline function则会在每一个调用使用的地方产生一个函数实体(在调用点展开函数体)。class在布局以及存取时间上...

值得推荐的C/C++框架和库

值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/~cz210552/webbench.html- 2. Tinyhttpdtinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代...

用C++实现打印小九九乘法口诀表【代码】【图】

#include <iostream>using namespace std;int main(void) { for(int i = 1; i < 10; i++) { for(int j = 1; j <= i; j++) { cout << j << "*" << i << "=" << i*j << "\t"; } cout << endl; } system("PAUSE"); return 0; }运行结果:650) this.width=650;" title="捕获.JPG" src="/upload/getfiles/default/2022/11/14/20221114095748066.jpg" />原文:http://hth...

c++实验十二 数组(二维)【代码】【图】

先通过一个二维数组保存学生相关的信息为了更直观的观看,决定用字符串数组来保存数据当然在计算的时候要转变格式,// 实验十二 数组(二维).cpp: 定义控制台应用程序的入口点。#include "stdafx.h" #include<iostream> using namespace std; #include<string>int main() {string a[4][5] = { {"生","号","语","数","英"} ,{"A ","01","80","85","96"},{"B ","02","72","90","89"},{"c ","03","78","86","88"} };cout << "当前成绩...

[C++设计模式] iterator 迭代器模式【图】

迭代器模式定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象。迭代器分内部迭代器和外部迭代器,内部迭代器与对象耦合紧密,不推荐使用。外部迭代器与聚合容器的内部对象松耦合,推荐使用。 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集 合内部的数据。而且,可以同时 定义多个迭代器来遍历,互不冲突。对于迭代器...

c++创建对象过程详解

创建对象的过程1.分配内存空间2.初始化成员变量3.调用构造方法 1. 分配内存空间(A a 和 new A的不同)对于全局对象,静态对象以及分配在栈区域内的对象,对它们的内存分配是在编译阶段就完成了,而对于分配在堆区域内的对象,它们的分配是在程序运行阶段完成的。------------------------------------------------------------------------------------------------------------------------------------------------------------...

Effective Modern C++:02auto【代码】

05:优先使用auto,而非显示类型声明 显示类型声明有下面一些缺点:int x; //未初始化,或者初始化为0,视语境而定 template<typename It> void dwim(It b, It e) {while (b != e) {typename std::iterator_traits<It>::value_type //啰嗦currValue = *b;…} } 另外,如果想要使用闭包的类型来声明变量,但是闭包的类型只有编译器知道。 有了auto之后,上面这些缺点都可以解决:int x1; // 潜在的未初始化风险 au...

C++中虚函数和多态【图】

1.C++中的虚函数C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。对C++ 了解的人都应该知道虚函数(Virt...

二叉搜索树C++实现【代码】

1 template<typename Element>2class BinarySearchTree3{4public:5 BinarySearchTree():root(NULL){}6 BinarySearchTree(const BinarySearchTree& bst):root(NULL)7 {8operator=(bst);9 }10virtual ~BinarySearchTree()11 { clear(root); }12 13void insert(const Element& e)14 { insert(root, e); }15void remove(const Element& e)16 { remove(root, e); }17bool contains(c...