精选文章

Android下使用TCPDUMP抓包Wireshark分析数据 如果想分析Android下某个APP的网络数据交互,需要在Android手机上抓包,最常用的抓包工具非tcpdump莫属,用tcpdump生成Wireshark识别的pcap文件,然后将pcap文件下载到电脑上,用电脑上的Wireshark加载pcap文件,通过Wireshark分析tcpdump抓取的数据。...

继续阅读

Mac下部署Android开发环境附加NDK 作为开发者,我们深有体会,不管是进行什么开发,为了部署开发环境,我们往往需要折腾很长时间、查阅很多资料才能完成,而且这次折腾完了,下次到了另一台新电脑上又得重新来过,整个部署过程记得还好,要是不记得又得重新开始,而且遇到Android这种GFW阻隔了开发资源下载链接的环境部署,又尤其浪费时间。所以这也是我写下这篇教程的初衷跟动力源泉,希望大家参考了这篇教程以后可以轻轻松松在Mac系统下将Android环境部署好。...

继续阅读

稍顯嚴肅的台中 坦白說,留在腦海中的台中影像並不多,來台灣之前在Booking上只訂到了台中的一家青旅,第一次住青旅有些不習慣,幹什麼都放不開。 同屋的一個男生是台灣人,不過一年中四分之三的時間在上海跟北京,這麼說來跟我還是比較有共同話題的。得之我準備花15天的時間環島,覺得太倉促了,他們大學時期花一個半月的時間也不見得能將台灣島給逛完。我只能無奈地表示,兩岸允許的簽證時間有限,自己的空閒時間更有限,只能用打卡式的旅行了,我深知正真地旅行應該慢下來,融入當地的環境,感受他們的風土人情,但第一次只能這樣作罷,以後換成民進黨上台,形勢會變成怎樣還不得而知,能否再過來還是個未知數。而我一向信奉的人生格言是秉燭夜遊,活在當下,所以,理解自己吧。...

继续阅读

為之留戀的新竹 來新竹之前本沒有對她有過高的期待,慢慢對她加分要從桃園火車站出發前往新竹開始。 在桃園火車站的候車月台上,有醒目的旅遊資料發放處,這上面的擺放的全是新竹的旅遊宣傳資料,關鍵的是資料做得非常簡潔易懂,而接下來一天的新竹之行就全部是依據這份寶典的指引來完成的。...

继续阅读

從桃園開始台灣之行 初到台灣恰逢華夏銀行系統升級,特意準備的華夏銀聯卡在桃園機場沒能派上用場,只好用建行在機場5000塊,算下來是很不划算的,但是沒辦法,誰叫我出機場就得花錢呢。 從機場打車到桃園的酒店,花了將近六百塊新台幣,到酒店時五點多,天已經漸亮了,洗漱完等到七點吃過早餐就開始補覺囉,一覺醒來已是中午,帶著換下來的衣服外出找自助洗衣店,順便覓食。...

继续阅读

  • Prev
  • Next

C++中的虚函数

分章分类 : C++

一、虚函数的定义和使用

可以在程序运行时通过调用相同的函数名而实现不同功能的函数称为虚函数。定义格式为:

virtual  <type>  FuncName(<ArgList>);

一旦把基类的成员函数定义为虚函数,由基类所派生出来的所有派生类中,该函数均保持虚函数的特性。 在派生类中重新定义基类中的虚函数时,可以不用关键字virtual来修饰这个成员函数 。虚函数是用关键字virtual修饰的某基类中的protected或public成员函数(当然private类的成员函数也可以是虚函数,他告诉用户你不能调用该函数,务必覆盖我它方能使用)。它可以在派生类中重新定义,以形成不同版本。只有在程序的执行过程中,依据指针具体指向哪个类对象,或依据引用哪个类对象,才能确定激活哪一个版本,实现动态聚束。 阅读全文

C++中的多态性

分章分类 : C++

多态性是面向对象的程序设计的关键技术。调用同一个函数名,可以根据需要但实现不同的功能,这便是多态。多态性分为编译时的多态(函数重载)跟运行时的多态(虚函数)。

运行时的多态是指在程序执行之前,根据函数名和参数无法确定应该调用哪一个函数,必须在程序的执行过程中根据具体的执行情况来动态地确定。可以将一个派生类对象的地址赋值给基类的指针变量。 阅读全文

网络编程之端口复用

分章分类 : C++, C语言, 应用与编程, 网络

设置端口复用,我们调用setsockopt()函数,并使用SO_REUSEADDR和SO_REUSEPORT选项。

一、SO_REUSEADDR主要有4方面的作用:

1、允许一个监听服务bind到现在正在被使用的端口上

例如: (1)创建一个套结字并bind到7080端口上,listen该套结字
(2)一个客户端connect该端口,accept该连接并转交给派生出来的子进程
(3)close监听套结字(注意此时子进程维护的客户端过来的连接依然存在)
(4)重新创建套结字并bind该7080端口,listen该套结字
最后一部在bind的时候会报错“Address already in use”,如果在bind之前用setsockopt设置SO_REUSEADDR选项,则不bind不会报错。 阅读全文

cout cerr clog 的区别

分章分类 : C++

cout、cerr、clog都是ostream类中定义的输出流对象。

1、cout是标准输出流

(1)它在内存中开辟一段缓冲区,用来暂存流中的数据,如果未遇到换行符endl/(‘\n’),只有当缓冲区满的时候才输出流中的所有数据,并在数据尾部加上换行符,如遇到换行符,则立即输出。
(2)可以将数据流重定向到文件中,如将a.out的输出流存入log.txt中./a.out >> log.txt。 阅读全文

C++运算符重载

分章分类 : C++

C++自带的运算符,像加减乘除,只支持一些基本的类型,很多时候,我我们需要用运算符实现一些复杂或抽象类型的计算,计算原理或形式虽然符合该计算符,但类型不支持,比如定义一个包含实部跟虚部的复数类,标准C++要实现该类对象的加减乘除运算显然不行,但是我们可以通过C++运算符重载的办法来实现这一功能。 阅读全文

C++静态数据成员和静态成员函数

分章分类 : C++

一、静态成员变量:

primer中是这样说的,对于所有的对象共有一个成员变量的就用static ,提供一个所有对象共有的一个成员变量比“每一个类对象维护一个成员变量” 要更有效。

在这种情况下类的静态数据成员提供了一个更好的方案,静态数据成员被当作该类类型的全局对象,对于非静态数据成员,每个类对象都有自己的拷贝,而静态数据成员对每个类对象只有一个共用的静态数据成员,同全局对象相比使用静态数据成员有两个优势:
1 、静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性;
2 、可以实现信息隐藏,静态成员可以是private 成员而全局对象不能。 阅读全文

友元函数和友元类

分章分类 : C++

C++采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。 阅读全文

深入探究内联函数

2

分章分类 : C++

内联函数——多么振奋人心的一项发明!它们看上去与函数很相像,它们拥有与函数类似的行为,它们要比宏好用的多,同时你在调用它们时带来的开销比一般函数小得多。可谓“内联在手,别无他求”。

你得到的远远比你想象的要多,因为节约函数调用的开销仅仅是冰山一角。编译器优化通常是针对那些没有函数调用的代码,因此当你编写内联函数时,编译器就会针对函数体的上下文进行优化工作。然而大多数编译器都不会针对“外联”函数调用进行优化。 阅读全文

C/C++存储区分类和内存地址分配

分章分类 : C++, C语言

C语言跟C++语言存储区分类大体一样,但仍有些细微差别。

一、在C语言中,内存区域可以分为以下5类

1、栈,由编译器负责自动分配与释放,一般在函数体类定义的局部变量与非main函数参数都放在栈内;
2、堆,由程序员主动分配和释放,若程序员不释放,则只会在程序退出的时候被系统释放,用malloc、calloc、realloc等函数申请到的内存区域放在堆上,需要使用free函数释放相应内存,否则只有在程序退出时才会被系统所回收;
3、全局/静态存储区,专门存放全局变量和静态变量的区域,它还可以再细分为两个区域,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域, 程序退出时才释放,例如在函数体外定义的全局变量和static修饰的变量;
4、常量存储区,专门用于存放常量的区域, 程序退出时才释放,例如形如“cpplive”之类的字符串。  阅读全文

C/C++头文件的结构与作用

3

分章分类 : C++, C语言, 应用与编程

1.1 头文件的结构

头文件由三部分内容组成:
(1)头文件开头处的版权和版本声明
(2)预处理块。
(3)函数和类结构声明等。

一些规则与建议:
【规则1】为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。
【规则2】用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
【规则3】用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
【建议1】头文件中只存放“声明”而不存放“定义”在C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。
【建议2】不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。
阅读全文