« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
|
|
[C/C++]C/C++复习笔记 三 |
内联函数宏:宏不是函数由于处理器展开,没有函数调用的开销C++的内联函数可以取代宏,必须在函数定义中把函数定义成inline内联函数和宏一样的是:他是由编译器其展开,也有函数的检查使用内联函数:编译器把内联函数放到符号表里,当有内联函数调用时,检查调用是否正确,返回值使用是否正确,然后将宏展开。为了macros的一些陷阱,建议永远使用内联函数。对于内联函数,内联函数是一些小而逻辑简单的代码,编译时,如果符合内联的要求,编译器会把声明称内联的函数直接将代码或编译后的代插入到调用处,这样可以减少函数调用的开销。声明内联函数要使用inline关键字,声明为内联的函数必须定义和声明写在一起。Class的成员函数如果写在class内则默认为内联函数。inline 声明只是对编译器的一个建议,并不一定会被使用。 static关键字全局变量extern int a=0;对所有编译单元可见,在进入main函数之前就被初始化。文件内定义的static变量,告诉编译器这是个一个内部连接函数里的static 变量,在第一次调用时被初始化,static可以保证函数在两次调用是值不变。静态对象的析构函数是在main退出时,或者在exit()调用之前,调用的。 名词空间namespace1) namespace只能在全局范畴定义,但它们之间可以互相嵌套。2) 在namespace定义的结尾,右大括号的后面不必要跟一个分号。3) 一个namespace可以在多个头文件中用一个标识符来定义,就好象重复定义一个类一样。4)一个namespace的名字可以用另一个名字来作它的别名,这样我们就不必敲打那些开发商提供的冗长的名字了。比如说namespace alex = ThisIsAelxLongNamespace;5) 我们不能像类那样去创建一个名字空间的实例1.每个编译单元可以有一个没有命名的名词空间。//cu.cppnamespace{class object{}...} 2. 友元:可以在一个名字空间的类定义之内插入一个friend 声明,这个友元也属这个namespace使用名词空间namespace1.alex::Student::age=5;//象使用类一样使用namespace2.使用using指令using namespace std;using namespace alex;using namespace chirs;如果alex 和chirs都有一个love 函数的话,就会发生冲突,3.使用using声明:void func(){using namespace alex;//using指令using chris::love;//uisng声明love();//chirs::love();alex::love();//必须这么使用} new and delete关键字内存区域的划分1.静态存储区域:存放static变量2.栈:函数调用使用的空间3.堆:动态存储区域在c中1 malloc()申请内存时候需要判断是否成功2 malloc申请的内存必须进行显示类型转换3 不要忘记free()在C++中,要在堆中申请存储空间,你要使用new关键字使用new关键字之后,会先申请空间,成功地话会调用构造函数初始化。要释放new申请的内存必须 要使用delete. 指针和引用以及拷贝构造(copy-constructor)A reference (&) is like a constant pointer that is automatically dereferenced. It is usually used for function argument lists and function return values. But you can also make a free-standing reference.1.引用在建立时必须初始化,2.一旦初始化华引用之后,就不能更改3.引用不能指向NULL值。const referance也就是指向常量的引用 //const int& =1;f(const int& i );g(int &i);f(1);//!g(1);pointer referanceint** p;可以写成 int*& p;也就是说int** p 指的是int* p的指针的引用你的函数可以改成这样:f(int** p){p++;}调用时:int* ip=&i;f(&ip);g(int*& p){p++;}调用时:g(p) The copy-constructor is used by the compiler to pass and return objects by value into and out of functions.默认拷贝构造函数的形式:class X{public:X(const &X);} 继承继承的语法默认为私有继承,:public为共有继承class D:Base{} 虚函数当建立虚函数时,编译器会自动为该对象建立一个虚表,存放对象方法地址。建立虚函数时要使用virtual关键字。virtual myVFun(){}纯虚函数,virtual myVFun()=0;如果声明了纯虚函数的话,或者派生类中有没有重载的virtual类,则不能用建立该对象的实力。使用多态时,用的是指针和引用,如果使用传值的话,会造成对象切片,即在调用时,会调用基类的拷贝构造函数,只把派生类和基类共有的部分拷贝,使派生类数据丢失。虚机制在构造函数和析构函数中不工作。析构函数必须为虚函数 | |
|
|
|
统计 |
blog名称: 日志总数:7 评论数量:9 留言数量:0 访问次数:40334 建立时间:2006年1月7日 | |