C/C++
wming2008
这个作者很懒,什么都没留下…
展开
-
标准I/O库
标准I/O库及其头文件stdio.h为底层I/O系统提供了一个通用的接口。这个库现在已经成为了ANSI标准C的一部分。原创 2010-09-15 23:58:38 · 63 阅读 · 0 评论 -
拷贝构造函数和赋值函数
-- C++中拷贝构造函数被调用的三种情形 1) 一个对象以值传递的方式传入函数体; 2) 一个对象以值传递的方式从函数返回; 3) 一个对象需要通过另外一个对象进行初始化; 对于前两种情况,如果不使用拷贝构造函数,就会导致一个指针指向已经被删除的内存空间。 对于第三种情况,初始化和赋值操作的不同含义是构造函数调用的原因。事实上,拷贝构造函数是由普通的构造函数和赋值操作符共同实...原创 2010-09-29 20:04:53 · 96 阅读 · 0 评论 -
构造函数和析构函数
-- 析构函数可以为virtual类型,而构造函数则不能。构造函数为什么不能为virtual类型呢? 虚函数采用一种虚调用的办法。虚调用是一种可以在只有部分信息的情况下工作的机制,特别允许我们调用一个只知道接口而不知道其准确对象类型的函数。但是如果要创建一个对象,就必须要知道对象的准确类型,因此构造函数不能为虚函数。 -- 如果虚函数是非常有效的,我们是否可以把每个函数都声明为虚函数?...原创 2010-09-29 19:17:26 · 96 阅读 · 0 评论 -
sizeof相关问题
1. sizeof的概念: sizeof是C的一种单目运算符,它以字节形式给出了它的操作数的存储大小。操作数可以是一个表达式或者括起来的数据类型。操作数的存储大小由操作数的类型决定。2. sizeof的使用方法: sizeof用于变量可以不带括号,也可以带括号,但是用于类型必须带括号;sizeof不能用于函数类型,不完全类型和位字段。不完全类型是指具...原创 2010-09-29 17:07:07 · 103 阅读 · 0 评论 -
scanf
scanf原创 2010-09-29 10:57:31 · 144 阅读 · 0 评论 -
定义&赋值&初始化
定义一个变量,就是分配一块存储空间并给它命名;给一个变量赋值,就是把一个值保存到这块存储空间中。变量的定义和赋值也可以一步完成,这称为变量的初始化(Initialization)初始化是一种特殊的声明,而不是一种赋值语句!...原创 2010-09-18 23:26:48 · 181 阅读 · 0 评论 -
“连接”相关细节
在一个执行程序中,标识符代表存放变量或者被编译过的函数体的存储空间。连接用连接器所见的方式描述存储空间。连接有两种方式:内部连接和外部连接。[b]内部连接:[/b] 内部连接意味着对正被编译的文件创建存储空间。用内部连接,别的文件可以使用相同的标识符或全局变量,连接器不会发现冲突------也就是为每一个标识符创建单独的存储空间。在c和c++中,内部连接是由sta...原创 2010-09-18 19:42:36 · 98 阅读 · 0 评论 -
内联函数
在C++中,宏的概念是作为内联函数来实现的。 内联函数无论从哪方面说都是真正的函数,唯一不同之处在于内联函数在适当的地方像宏一样展开,所以不需要函数调用的开销。因此,应该(几乎)永远不要使用宏,只使用内联函数。 任何在类中定义的函数(不包括在类中声明,在类外定义的成员函数)自动地成为内联函数,但也可以在非类的函数前加上inline关键字使之成为内联函数...原创 2010-09-18 17:12:37 · 80 阅读 · 0 评论 -
C++虚函数机制
典型的编译器对每个包含虚函数的类创建一个表(称为VTABLE). 在VTABLE中,编译器放置特定类型的虚函数地址。在每一个带有虚函数的类中,编译器秘密地放置一个指针,称为vpointer(缩写为VPTR),指向这个VTABLE。当通过基类指针做虚函数调用时(也就是做多态调用时),编译器静态地插入能取得这个VPTR并在VTABLE表中查找函数地址的代码,这样就能调用正确的...原创 2010-09-18 15:29:11 · 107 阅读 · 0 评论 -
引用的相关重点
引用的主要用途是为了描述函数的参数和返回值,特别是为了运算符重载。 为了确保一个引用总能是某个东西的名字(也就是说,总能约束到某个对象),我们必须对引用做初始化。例如:[code="c++"]int i = 1;int & r1 = i; //正确,r1被初始化int & r2; //错误,没有初始化extern int & r3...原创 2010-09-18 15:15:47 · 108 阅读 · 0 评论 -
虚继承的构造函数调用问题
在某一个虚基类的任何一个派生类的构造函数中,都要将该虚基类的构造函数显示列出来。包含虚基类的派生类对象的构造函数的调用顺序如下: 1. 虚基类的构造函数在非虚基类之前调用。 2. 若同一层次中包含多个虚基类,这些虚基类的构造函数按它们说明的顺序调用。 3. 若虚基类由非虚基类派生而来,则仍然按照先调用基类的构造函数,再调用派生类的构造函数的执行顺序。[code="c++"...原创 2010-09-18 14:27:48 · 709 阅读 · 0 评论 -
动态联编与静态联编
[code="c++"]#include using namespace std;class base{public: virtual void f1(){ cout原创 2010-09-18 14:23:26 · 79 阅读 · 0 评论 -
static在不同地方的含义
1. 源文件中定义函数使用的static表示的是访问权限:只有在该源文件中的代码才可以访问该函数,它和extern修饰的函数相对应。(注意这里的static函数不指类的静态成员)2. 函数中定义的静态变量使用的static表示该变量是存放在全局变量存储区,在[color=red]程序运行过程[/color]中都是始终存在的,但是只能在该函数内访问到,它和普通的函数中的局部变量在[color...原创 2010-09-18 13:52:48 · 247 阅读 · 0 评论 -
头文件中的名字空间
不要在头文件中放置使用指令,使用指令的通常形式是:[code="c"]using namespace std[/code]因为std是环绕整个标准c++库的名字空间,所以这个特定的使用指令允许不用限定方式使用标准c++库中的名字。但是在头文件中是绝不会看到使用指令的(至少,不在一个范围之外)。原因是,[b]这样的使用指令去除了对这个特定名字空间的保护[/b],并且这个结果一直持续到当前的编...原创 2010-09-18 13:41:58 · 266 阅读 · 0 评论 -
为什么不能通过返回值重载
为什么只能通过范围和参数来重载,而不能通过返回值呢? 当编译器能从上下文中唯一的确定函数的意思时,如int x = f();这是没有问题的。然而,在C/C++中我们总是可以调用一个函数但忽略它的返回值,即调用了函数的副作用,在这种情况下,编译器不知道调用的哪个函数,而且读者也不知道调用的是哪个函数,所以c++禁止这种调用。...原创 2010-09-18 13:33:00 · 446 阅读 · 0 评论 -
编译C程序的详细过程
[b]编译的概念[/b]:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:[color=red]C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.obj、.o、.a、.ko)-->链接程序(.exe、...原创 2010-09-16 00:04:31 · 814 阅读 · 0 评论 -
C++强制类型转换
C++同时提供了四种新的强制转型形式(通常称为新的或C++风格的强制转型): const_cast(expression) dynamic_cast(expression) reinterpret_cast(expression) static_cast(expression) 每一种适用于特定的目的。 dynamic_cast主要用于执行“安全的向下转型(safe ...原创 2010-09-29 23:50:43 · 92 阅读 · 0 评论