c++复习——侯捷版
c++ primer
effective c++中文版
STL源码剖析——侯捷
在.h中进行防卫式声明,如果没有定义过它,那么就定义它。如果定义了,那么就不会进去,也就是下图框中的内容
1是声明,2是对声明的定义,那么还需要提前弄个声明,那么就是0
类的组成部分
先有头,再有具体的内容,有些函数是直接在类里面定义,有些是在类之外定义
模板(class template)简介
将实部和虚部变量的类型不写死,如下图所示,T没写明具体类型,当我想具体使用的时候,我再去指定具体的类型,比如下面没有写死,在具体应用的时候,指明T的类型是double和int类型
内联函数(inline)
一些函数如果被重复调用,就会有函数不断地入栈,会造成栈空间和栈内存的大量消耗。
#include <stdio.h>
//函数定义为inline即:内联函数
inline char* dbtest(int a)
{
return (i % 2 > 0) ? "奇" : "偶";
}
int main()
{
int i = 0;
for (i=1; i < 100; i++)
{
printf("i:%d 奇偶性:%s /n", i, dbtest(i));
}
比如上面的程序,使用inline,任何调用dbtest(i)的地方都换成了(i%2>0)?"奇":"偶"这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。也就是说将setest的代码直接放入到main函数里面,这样在执行for循环时,不需要重复开辟一个函数栈。
inline只适合函数体内代码简单的函数数使用,不能包含复杂的结构控制语句例如while、switch,并且内联函数本身不能是直接递归函数(自己内部还调用自己的函数)。
内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。
关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。
不能成为inline函数
inline void Foo(int x, int y); // inline 仅与函数声明放在一起
void Foo(int x, int y)
{
}
是inline函数
void Foo(int x, int y);
inline void Foo(int x, int y) // inline 与函数定义体放在一起
{
}
重载
构造函数
构造函数放在private里面 可以来实现单例