惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
U
Unit 42
MyScale Blog
MyScale Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
量子位
IT之家
IT之家
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
Recent Announcements
Recent Announcements
V
Visual Studio Blog
G
Google Developers Blog
Last Week in AI
Last Week in AI
雷峰网
雷峰网
博客园 - 聂微东
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
博客园 - 司徒正美
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏

博客园 - Ghost_zhao

knowlegecube 不停服更新二进制文件 linux 热替换so文件 博客更换至 www.zhaoch.top linux ptheard 生产者消费者 一个简单的makefile,一次性编译本文件夹下所有的cpp文件 c++ 最短路两种算法 C++语言十进制数,CDecimal(未完成) C语言面向对象的简便方法 C语言2048 C图书借还示例 Javascript 备忘 MFC小备忘 C++学习备忘(二) C++坦克大战 C++ 走迷宫 MFC 扫雷 用MFC作的俄罗斯方块 C#手动回收内存的简单方法
C++学习备忘(一)
Ghost_zhao · 2013-02-09 · via 博客园 - Ghost_zhao

1. C++ 内存使用分为堆、栈:栈是相对静态的,系统自动释放,一般是固定大小,固定位置的,如 int a, double d,int[100]等,堆是相对动态的,通常有newmalloc 行为产生,系统不会自动释放堆的内存。Delete 会触发析构函数。

  例如:

void Test()

{

Int x = 1;//  函数执行后自动释放

Int *p = new int(1);// 函数执行后不会自动释放需要手动释放;

Delete(p);//释放

P=NULL; // 如果后面还有进一步操作必须至NULL 在应用时检测是否为空!

}

2. C++ 的变量不会自动初始化,需要手动初始化 。例如:int x=0。对于全局或是静态的变量,声明时就要初始化,因为不知道什么时候会第一次被调用,

3.带初始化的全局变量不要定义在h文件中,定义在cpp中使用extern

4.C++进行覆盖时,在父类头文件中要加virtual 在 父类 Cpp 文件中不需要加 virtual

  子类不需要加 override,调用被覆盖的父类方法时使用父类限定名加“::”,如 在 BaseClass::F()。子类的构造函数会默认调用父类的无参数构造函数,如果需要调用父类特定的构造函数需要显示声明如AITank::AITank(void):Tank();

5.C++ 在类内使用常量的时候只能使用  static const int 不能使用其他类型 如 float

6.C++ 多项目配置,调用分静态和动态,静态用lib动态用dll,同一个解决方案下一般有一个exe项目,多个lib项目,生成结果单独一个exe即可使用,项目添加引用lib分三步:

  1>C/C++添加include,包含头文件文件夹;

  2>linkerlibrarion中添加lib文件名;

  3>linkerlibrarion中添加lib文件路径

 注意:可使用相对路径和$(dir)等形式,有待以后研究。

http://www.cnblogs.com/cumtb3S/archive/2010/11/23/1885826.html

 配置引用后还要在解决方案处设置依赖关系:

Exe引用 lib

Lib引用lib

7.方法和类最好不要同名

8.释放指着的空间比较麻烦,如果需要用到就指针的数据生成新指针,之后又需要删去旧指针,需要一个tmp 

   Int *data = new int(1);

   Delete data; 

   data = (*data)+1;//出错

   正确的方法:

   Int *data = new int(1);

   Int *tmp = data; //remember old data

    data = new int((*data)+1); // use old data initialize new data 

   Delete tmp ; // delete old pointer release memory 

9 abstract不是c++的关键词,是微软自己的发明,用来提供.net支持

10.VS中的路径宏 vc++OutDirProjectDirSolutionDir各种路径

    http://www.cnblogs.com/lidabo/archive/2012/05/29/2524170.html

11.函数指针

 typedef int (*Func)(void);

int GetX()

{

  return 1;

}

int _tmain(int argc, _TCHAR* argv[])

{

   Func f;

f = GetX;

    //两个都可以

cout << (*f)() << endl;

cout << f() << endl;

return 0;

}

12.指向类成员函数的指针比较复杂,定义时需要加上类的限定符如 typedef int (Matt::*FuncPoint)(int,int)使用时必须也只能借助该类的一个实例,

如  FuncPoint add = &Math::Add; 

Math m;

int result = (m.*add)(1,2);

复杂的例子见 FuncPointerTest

参考网址:http://wenku.baidu.com/view/31e6dc30b90d6c85ec3ac6fc.html 

          http://www.cnblogs.com/bastard/archive/2012/01/10/2318417.html