随笔分类 -  C++基本语法

摘要:(一)inline函数(摘自C++ Primer的第三版)在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/}; inline 函数对编译器而言必须是可见的,以便它能够在调用点内... 阅读全文
posted @ 2014-04-21 09:46 大卫酱_David 阅读(3597) 评论(1) 推荐(0)
摘要:C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。一、Const作用如下表所示:No.... 阅读全文
posted @ 2014-04-17 17:10 大卫酱_David 阅读(1076) 评论(0) 推荐(0)
摘要:1 前言我在本文中详细介绍了测试工具NuMega Devpartner(以下简称NuMega)的使用方法。NuMega是一个动态测试工具,主要应用于白盒测试。该工具的特点是学习简单、使用方便、功能有效。NuMega共有三个独立的子功能——BoundsChecker、TrueCoverage、TrueTime。BoundsChecker为代码检错工具,TrueCoverage为测试覆盖率统计工具,TrueTime为程序运行性能测试工具。本文挡通过三章对NuMega三个子功能的使用方法进行了介绍,各部分之间内容独立。如果你想了解NuMega的各项功能,建议阅读本文挡全部内容,如果你只想了解NuMe 阅读全文
posted @ 2014-04-02 00:09 大卫酱_David 阅读(340) 评论(0) 推荐(0)
摘要:1 引子标准C++中没有真正的面向对象的函数指针。这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它宝贵的价值。在Delphi (Object Pascal)中,面向对象的函数指针是Borland可视化组建库(VCL,Visual Component Library)的基础。而在目前,C#使“委托”的概念日趋流行,这也正显示出C#这种语言的成功。在很多应用程序中,“委托”简化了松耦合对象的设计模式[GoF]。这种特性无疑在标准C++中也会产生很大的作用。很遗憾,C++中没有“委托”,它只提供了成员函数指针(m 阅读全文
posted @ 2014-04-01 15:30 大卫酱_David 阅读(494) 评论(0) 推荐(0)
摘要:Sink的本质是利用C++的封装、继承、多态的面向对象来实现,从实现角度来说,更优于函数指针回调; 1 // cbBysink.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include "cbBysink.h" 6 7 /***************... 阅读全文
posted @ 2014-04-01 13:13 大卫酱_David 阅读(2595) 评论(0) 推荐(0)
摘要:1 #include 2 using namespace std; 3 4 5 /************************************************************************/ 6 /* 下层实现: CALLBACK */ 7 /************************************************************************/ 8 9 typedef void (*CALLBAC... 阅读全文
posted @ 2014-04-01 10:54 大卫酱_David 阅读(252) 评论(0) 推荐(0)
摘要:模板编程,也叫“通用编程”或“泛型编程”,泛型编程即独立于任何特定类型的方式编写代码。一般而言,模板分为:函数模板 和 类模板。1. 函数模板模板函数的定义格式:template 返回类型 函数名(函数参数列表) { 函数实现 };template int function(T a, T b){ if (a b) return 1;}函数模板的使用方式:函数模板使用时,编译器会先判断哪个模板实参绑定到模板实参,一旦编译器确定了实际的模板实参,就称为实例化了函数模板的一个实例。 1 int main(int argc, char* argv[]) 2 { 3 int a = 1;... 阅读全文
posted @ 2014-03-21 15:11 大卫酱_David 阅读(327) 评论(0) 推荐(0)
摘要:介绍内联函数之前,有必要介绍一下预处理宏。内联函数的功能和预处理宏的功能相似。相信大家都用过预处理宏,我们会经常定义一些宏,如#define TABLE_COMP(x) ((x)>0?(x):0)就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销, 阅读全文
posted @ 2014-03-18 15:57 大卫酱_David 阅读(235) 评论(0) 推荐(0)
摘要:标准C++包含一个显式的转换语法:--static_cast:用于“良性”和“适度良性”的转换,包括不用强制转换--const_cast:用于“const”和/或“volatile”进行转换--reinterpret_cast:转换为完全不同的意思。为了安全的使用它,关键必须转换回原来的类型。转换成的类型一般只能用于位操作,否则就是为了其他隐秘的目的。这是所有转换中最危险的。--dynamic_cast:用于类型安全的向下转换-----常用-----static_cast:用于所有明确定义的转换,包括void*的强制转换、隐式类型转换、类层次的静态定位。1. 数据类型由小到大的转换,比如int 阅读全文
posted @ 2014-03-18 14:16 大卫酱_David 阅读(155) 评论(0) 推荐(0)
摘要:extern是一个关键字,它告诉编译器存在着一个变量或者一个函数,如果在当前编译语句的前面中没有找到相应的变量或者函数,也会在当前文件的后面或者其它文件中定义,来看下面的例子:上面代码中变量i和函数func在文件末尾定义,所以变量需要使用extern关键字告诉编译器,变量在别的地方定义。extern int i我原来以为extern i就可以,结果编译器报错,仔细想下确实应该,否则编译器不知道i是什么类型的数据,又怎么能判断i = 0是否是一个正确的赋值语句呢?那么定义在其他文件中的函数和变量,如何通过extern关键字调用呢?首先,定义在其它文件中的函数和变量,可以使用两种方法调用:一、使用 阅读全文
posted @ 2014-03-17 16:52 大卫酱_David 阅读(191) 评论(0) 推荐(0)
摘要:析构函数的工作方式是:最底层的派生类(most derived class)的析构函数最先被调用,然后调用每一个基类的析构函数。--从高到低依次析构…因为在C++中,当一个派生类对象通过使用一个基类指针进行删除(B::A; A *a = new B(); delete a),而这个基类有一个非虚的析构函数,则结果是未定义的。运行时比较有代表性的后果是对象的派生部分不会被销毁。然而,基类部分很可能已被销毁,这就导致了一个古怪的“部分析构”对象,这是一个泄漏资源。排除这个问题非常简单:给基类一个虚析构函数。于是,删除一个派生类对象的时候就有了你所期望的正确行为。将销毁整个对象,包括全部的派生类部分 阅读全文
posted @ 2014-03-17 11:11 大卫酱_David 阅读(201) 评论(0) 推荐(0)
摘要:和其他类一样,基类或派生类可以使其他类或函数成为友元。---(被友元的类和函数需另自行定义)友元可以访问类的private和protected数据,但不能继承,基类的友元对派生类的成员没有特殊访问权限。比如有个类:class Base{ friend class Frnd;protected: int i;};// Frnd并非类D1的友元类:class D1 : public Base{protected: int j;};class Frnd{public: int mem(Base b) {return b.i; } // OK int mem(D1 d){return d.i; } / 阅读全文
posted @ 2014-03-15 14:27 大卫酱_David 阅读(481) 评论(0) 推荐(0)
摘要:在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。在实际使用过程种有什么区别呢?主要是符号位,但是在普通的赋值,读写文件和网络字节流都没什么区别,反正就是一个字节,不管最高位是什么,最终的读取结果都一样,只是你怎么理解最高 阅读全文
posted @ 2014-03-15 13:23 大卫酱_David 阅读(172) 评论(0) 推荐(0)