c++
文章平均质量分 57
first_wolf
linux
展开
-
图说UML中的六大关系
UML定义的关系主要有六种:依赖、类属、关联、实现、聚合和组合。这些类间关系的理解和使用是掌握和应用UML的关键,而也就是这几种关系,往往会让初学者迷惑。这里给出这六种主要UML关系的说明和类图描述,一看之下,清晰明了;以下就分别介绍这几种关系:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常转载 2013-03-01 21:55:06 · 762 阅读 · 0 评论 -
命名空间(二)
待续...原创 2013-05-08 19:05:26 · 691 阅读 · 0 评论 -
命名空间(一)
一 概述:(1)命名空间:为防止名字冲突提供了更加可控的机制,命名空间能够划分全局命名空间,一个命名空间就是一个作用域。(2)命名空间的定义:namespace+命名空间名字。*格式:namespace namespace_name{/*声明和定义*/}//不加分号如果namespace_name不是引用前面定义的命名空间,则该名字创建新的命名空间,否则,这个定义打开一原创 2013-05-08 19:04:44 · 962 阅读 · 0 评论 -
溢出
待需...原创 2013-07-22 18:10:38 · 675 阅读 · 0 评论 -
C++运行时类型识别RTTI
待续...原创 2013-07-01 18:28:52 · 1049 阅读 · 0 评论 -
Inside The C++ Object Model(五)构造、拷贝、析构语意学
待续...原创 2013-06-18 13:57:25 · 923 阅读 · 0 评论 -
c++异常处理(二)详述(2)
一 重新抛出与捕获所有异常:(1)重新抛出:*有可能单个catch不能完全处理一个异常,在进行一些校正工作之后,catch可能确定该异常必须由函数调用链中更上次的函数来处理。*格式:重新抛出是后面不跟类型或表达式的一个throw:throw。*空throw将重新抛出异常对象,只能出现在catch或者从catch调用的函数中。如果在处理代码不活的时遇到空throw语句,就调用te原创 2013-05-07 14:15:17 · 701 阅读 · 0 评论 -
序列化(java+C++)
一 序列化概念:(1)定义:*序列化:是将对象状态信息转换为可存储或传输的过程,序列化时,对象会将当前状态写入到临时或持久性的存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。*反序列化:序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。(2)主要用处(传递和保原创 2013-06-27 10:50:09 · 1011 阅读 · 0 评论 -
c++嵌套类、局部类
待续....原创 2013-07-03 16:33:35 · 927 阅读 · 0 评论 -
Inside The C++ Object Model(六)执行期语意学
待续...原创 2013-06-18 13:57:46 · 758 阅读 · 0 评论 -
C++虚函数
一 虚函数的实现模型:(一)虚函数的一般实现模型(1和2):1.每个含有虚函数的class有一个virtual table,虚表里存放一堆指向virtual function的指针,虚表里每个虚函数都指派一个固定的索引值,这个索引值在整个继承体系中保持与特定的virtual function的关联。2.每个class object添加一个指向相关virtual table的指针,通常称原创 2013-06-18 13:54:29 · 747 阅读 · 0 评论 -
重载
一 重载的条件:(1)相同作用域中,具有相同名字而参数表不同:参数个数或类型不同。(2)两个成员函数的常量性不同,即一个是const成员函数,一个是非const成员函数。(3)仅当形参是指针或引用时,形参是否是const才可以重载。*可基于函数的引用形参是指向const对象还是非const对象,实现函数重载。*对于指针类型,编译器可以判断:如果实参是const对象,则调用带有c原创 2013-07-26 22:05:28 · 1118 阅读 · 0 评论 -
inline函数
一 inline函数概述:(1)inline只是对编译器的一个申请,不是强制命令。申请方式:隐式申请(将函数定义于class定义式内);显式申请(将inline函数定义前加上关键字inline)。(2)inline函数的优点:*免除函数调用成本;*方便编译器的优化机制进行优化;(3)inline函数的缺点:*过度热衷inline会造出代码膨胀;原创 2013-07-26 22:22:13 · 959 阅读 · 0 评论 -
友元(friend)
一 概述:(1)友元机制:允许一个类将对其非公有成员的访问权限授予指定的函数或类。(2)友元的声明:以关键字friend开始,只能定义在类定义的内部,可以出现在类内部的任何地方,通常将友元声明成组的放在类定义的开始或结尾。原创 2013-07-27 14:22:36 · 787 阅读 · 0 评论 -
类型转换
1. 隐式类型转换:编译器自动执行,无需程序员介入。(内置类型和类类型对象) explicit可以禁止“单参数构造函数”被隐式类型转换。2.显式类型转换(又称强制类型转换) static_cast、dynamic_cast、const_cast和reinterpret_cast。原创 2013-02-02 14:45:25 · 350 阅读 · 0 评论 -
指针和引用
(1)相同点:都是间接的引用对象。(2)使用上差别:*引用:必须初始化,不能为NULL,即没有NULL引用;不可以被重新赋值;*指针:可以为NULL,可以被重新赋值执行其它对象。(3)本质上差别:*引用:只是一个别名;逻辑上不独立,具有依附性,对引用取地址得到的是变量的地址。*指针:指针本质上是一个存放变量地址的一个变量,在逻辑上独立,可以被改变。*程序在编译时分别原创 2013-09-06 10:35:47 · 645 阅读 · 0 评论 -
static关键字
一 概述:*static在c++中主要有两种用法:面向过程中的static和面向对象中的static。*前者主要针对变量和函数,后者主要针对在类中的作用。二 面向过程中static:(1)静态全局变量:*在全局变量前面,加上关键字static,该变量就定义为静态全局变量。*特点:~在全局数据区分配内存;~在声明它的整个文件可见,在文件之外不可见即不能被其原创 2013-02-02 14:44:28 · 434 阅读 · 0 评论 -
程序编译、链接和加载
一 流程:编译->链接->加载。原创 2013-09-05 20:41:46 · 699 阅读 · 0 评论 -
const限定符
(1)const对象定义时必须初始化,因为定义后不能修改。#define后可以再重新#define。(2)const对象默认为文件的局部变量。 I.在全局作用域(定义在所有函数(包括main函数)外的变量具有全局作用域,可以在程序的任何地方访问)定义的非const变量,在整个程序都可以访问。例如: //file1.cpp(注意不是在头原创 2013-02-02 14:32:01 · 416 阅读 · 0 评论 -
设计头文件
一 头文件内容:(1)一般包含:类的定义、extern 变量的声明和函数的声明。(定义只可以出现一次,而声明可以出现多次)。因为头文件要包含在多个源文件中,所以不应该有变量或函数的定义。 (2)三个例外:*头文件可以定义类;*值在编译时就知道的常量(const对象和#define等)和inline函数(在类内定义的函数默认是inl原创 2013-02-02 14:46:05 · 563 阅读 · 0 评论 -
链接指示extern "C"
待续...原创 2013-08-16 12:01:25 · 640 阅读 · 0 评论 -
c++中内存分配(new和operator new)
一 关于new:(1)new 表达式(new operator):申请内存和初始化对象,delete表达式先析构对象和后释放内存。(2)new 操作符(operator new):类似c中的malloc,只负责申请内存,operator delete负责释放内存。表达形式:operator new 类型c中malloc,operator delete类似c中的free,需要加括号。原创 2013-02-01 13:05:13 · 677 阅读 · 0 评论 -
extern关键字
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2013-02-01 12:59:38 · 328 阅读 · 0 评论 -
构造函数
(1)构造函数: 只要创建类类型的新对象,都要执行构造函数。构造函数与类的名字相同,并且没有指定返回类型。(2)构造函数可以被重载: 1.类声明的构造函数数量没有限制,只要每个构造函数的形参表是唯一的。 2.实参决定调用哪个构造函数。 3.构造函数自动运行:只要创建一个对象,编译器就运行原创 2013-02-02 14:38:55 · 362 阅读 · 0 评论 -
c++多重继承与虚继承
待续...原创 2013-07-03 16:34:22 · 815 阅读 · 0 评论 -
函数参数传递
函数调用做了两件事情:(1)用对应的实参初始化函数的形参,并将控制权转移给被调用函数。(2)主调函数的执行被挂起,被调函数开始执行。(1)非引用形参 1. 普通的非引用类型的参数通过复制所对应的实参实现初始化。当实参副本初始化形参时,不会修改实参的值。 2. 指针形参:函数的形参可以是指针,此时复制实参指针,同1一样,仅作用于副本。原创 2013-02-02 14:36:42 · 375 阅读 · 0 评论 -
逻辑操作符和位操作符
(1)逻辑操作符:逻辑与(&&)、逻辑或(||)、逻辑非(!) 例如: expr1&&expr2;//logical AND expr1||exper2// logical OR 仅当expr1不能确定表达式的值时,才会求解exper2。(2)位操作符 位操作符使用整型的操作数。位原创 2013-02-02 14:33:54 · 1093 阅读 · 0 评论 -
指针与引用
总体来说: 相同点: 都可间接访问另外一个对象。 不同点: (1)引用:总是指向某个对象:定义引用时没有初始化是错误的。 指针:可以指向另外的对象,可以赋空值初始化。指针的初始化:0值常量表达式、类型匹配的对象的地址、另一对象之后的地址和转载 2013-02-02 14:30:46 · 358 阅读 · 0 评论 -
程序内存分配
首先要搞清楚编译程序占用的内存的分区形式:一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,转载 2013-02-01 13:01:08 · 391 阅读 · 0 评论 -
句柄(handle)类
一 概述: 句柄类:存储和管理基类指针。指针所指对象可以变化,它即可以指向基类类型对象也可以指向派生类对象。用户可以通过句柄类访问继承层次的操作,句柄的用户可以获得动态行为但无需操心指针的管理。(搞清楚用处)程序如下://句柄类的使用,仔细揣摩。#includeusing namespace std;cla原创 2013-02-01 13:22:15 · 1291 阅读 · 0 评论 -
c++位操作符
一 位操作符 位操作符使用整型的操作数,将整型看作是二进制位的集合,为每一位提供检验和设置的功能。整型即char或者int的数据类型,无论有没有short、long、long long、unsigned等限定词,建议使用unsigned整型操作数(位操作数为负数,则如何处理其符号位依赖于机器)。 移位操作: c语言提供一组移原创 2013-02-01 13:16:46 · 465 阅读 · 0 评论 -
Memberwise Initialization和Bitwise copy
一、首先要分清楚这两者之间的关系:两个概念属于不同“集合”(但有部分交集)。1. Default Memberwise Initialization是与user defined Initialization相对应的。是从编译器(计算机)与程序员(用户)的角度出发;2. bitwise copy 是与memberwise copy相对应的。是两种不同的拷贝方式,编译器通常为了效率会选择bit转载 2013-02-01 12:57:20 · 782 阅读 · 0 评论 -
C++中的operator new与new operator
C++中的operator new与new operator,看上去挺像的两姐妹,却有天壤之别。operator new(1) 只分配所要求的空间,不调用相关对象的构造函数。当无法满足所要求分配的空间时,则 ->如果有new_handler,则调用new_handler,否则 ->如果没要求不抛出异常(以nothrow参数表达),则执行b转载 2013-02-01 13:15:56 · 565 阅读 · 0 评论 -
C转义序列
转义字符是C语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的 单撇号( ''),用于表示字符串常量的双撇号( ")和反斜杠( \)等。转义字符用反斜杠\后面跟一个字符或一个八进制或十六进制数表示。转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退转载 2013-02-01 13:13:57 · 642 阅读 · 0 评论 -
类成员初始化
1、普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行。class CA{public:int data;public:CA();};CA::CA():data(0)//……#1……初始化列表方式{//data = 0;//……#1……赋值方式};2、static 静态变量:转载 2013-02-01 12:52:35 · 370 阅读 · 0 评论 -
c风格字符串与c++string比较
(1)c风格字符串:以空字符null结束的字符数组;永远不要忘记字符串结束符bull。(2)尽可能的使用标准库类型string,更安全、更高效。(3)可以用c风格字符串对string对象进行初始化。但是不能用string直接初始化c风格字符串,string类提供了一个c_str的成员函数,c_str返回的指针指向const char类型的数组。例如:const char *str=str2原创 2013-02-02 14:33:04 · 741 阅读 · 0 评论 -
sizeof操作符
一 概述sizeof操作符的作用是返回一个对象或类型名的长度,返回值的类型为size_t,长度的单位为字节;sizeof的结果是编译型常量。1 三种语法形式:sizeof(type_name)sizeof (expr)sizeof expr2 当sizeof用于expr时,并没有计算表达式expr的值。特别是在sizeof *p中,指针p可以是个无效地址原创 2013-03-02 11:10:03 · 529 阅读 · 0 评论 -
字符串的读取和输出
一 C中的字符串读取函数:1 单个字符读取和输出函数:读取:int fgetc(FiLE *stream) #注意返回值是该字符的int类型的值。int getc(FILE *stream) #同上,getc和fgetc相似,只是getc通常实现为宏,更加高效。int getchar(void) #getchar等价于getc(stdin),getchar也通常实现为宏原创 2013-03-03 15:23:35 · 1126 阅读 · 0 评论 -
GCC使用指南
一 GCC概述(gcc.gnu.org):(1)GCC可同时编译C程序和C++程序。*gcc命令只能编译C++源文件,而不能和C++程序使用的库链接。因此,通常用g++命令来完成对C++程序的编译和链接,该程序会自动调用gcc实现编译。*编译系统出错时,注意是编译错误还是链接错误。二 gcc常用选项:(一)常用编译选项:*-E:只进行预处理,不编译和汇编。原创 2013-05-08 12:29:06 · 1013 阅读 · 0 评论 -
静态库与共享库
一 概述:(一)目标文件的三种形式:*可重定位目标文件:包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件合并起来,创建一个可执行目标文件。*共享目标文件:一种特殊的可重定位目标文件,可以在加载或者允许时被动态的加载到存储器并链接。*可执行目标文件:包含二进制和数据,其形式可以被直接拷贝到存储器执行。编译器和汇编器生成可重定位目标文件(包括共享目标文件),链接器生成原创 2013-05-06 16:02:06 · 826 阅读 · 0 评论