C/C++
ZeroCBoy
世上不缺武林秘籍,缺的是一颗潜心修炼的心。
展开
-
volatile
volatile:易变的,不稳定的。volatile用来声明那些可能在你的程序本身不知道的情况下会发生改变的变量。一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。对于一般变量:为提高存取速度,编译器优化时有时会先原创 2016-06-12 00:06:48 · 863 阅读 · 0 评论 -
构造函数的执行顺序
先执行基类的(如果基类当中有虚基类,要先执行虚基类的,都是按照继承时的顺序依次执行),再执行成员对象的(声明的顺序),最后执行自己的。(切记都不是初始化列表的顺序)原创 2016-06-12 00:02:43 · 1176 阅读 · 0 评论 -
通用多态(参数多态、包含多态)特定多态(重载多态、强制多态)
1.通用多态a.参数多态:模板。b.包含多态:virtual。2.特定多态a.重载多态:b.强制多态:强制类型转换。原创 2016-06-05 00:33:25 · 3204 阅读 · 0 评论 -
运行时类型识别(RTTI)
实现RTTI的两个重要运算符:typeid:返回表达式的类型。dynamic_cast:用于将基类的指针或引用安全地转换成派生类的指针或引用。当我们将这两个运算符用于某种类型的指针或引用,并且该类型含有虚函数时,运算符将使用指针或者引用所绑定对象的动态类型。特别适用于此情况:我们想使用基类对象的指针或引用执行某个派生类操作并且该操作不是虚函数。1原创 2016-06-09 19:18:19 · 603 阅读 · 0 评论 -
C++命名的强制类型转换(static_cast dynamic_cast const_cast reinterpret_cast)
cast_name(expression)1.static_cast:任何具有明确定义的类型转换,只要不包含底层const(比如常量指针,而不是指针常量),都可以使用。常用于窄化转换(告诉程序的读者和编译器:我们知道并且不在乎潜在的精度损失),编译器无法自动执行的类型转换(找回存在于void*指针中的值)。a.用于类层次结构中基类和派生类之间指针或者引用的转换(up-casting把派原创 2016-05-25 00:49:32 · 1031 阅读 · 0 评论 -
一步一步写makefile
一、简单小例子//sum.c#include #include "add.h"int main(){ printf("%d\n",add(1,2));}//add.c#include "add.h"int add(int a,int b){ return a+b;}//add.hint add(int a,int b);现在开始输命令:1.原创 2016-05-05 16:16:47 · 546 阅读 · 0 评论 -
《C和指针》读书笔记
第一章1.#include #define EXIT_SUCCESS 1#define EXIT_FAILURE 02.在C语言中用/*和*/注释代码并不是十分安全(不允许嵌套),要从逻辑上删除一段C代码,最好的办法是使用#if指令。#if 0 statements#endif3.scanf:使用所有格式码(除了%c之外)时,输入值之前的空白(空格、原创 2016-05-03 19:33:58 · 1003 阅读 · 0 评论 -
C++中类对象的内存布局和占用空间
1.非静态成员变量总合。2.编译器为了CPU计算,作出的数据对齐处理。(可用#pragma pack(n)来设定变量的对齐方式)3.为了支持虚函数,产生的额外负担。//例子:#pragma pack(2)class BU{ int number; //4 union UBffer { char buffer[13];原创 2016-05-31 22:09:01 · 713 阅读 · 0 评论 -
纯虚函数可以有函数体
出处:《C++Primer》中文版第五版541页第22行。我们可以为纯虚函数提供定义,不过函数体必须定义在类的外部。若定义在类的内部,会出现错误:pure-specifier on function-definition。class Dummy{ //error:pure_specifier on function-definition. virtual void proce原创 2016-05-31 15:21:24 · 5294 阅读 · 0 评论 -
缺省参数值是静态绑定的
class A{public: virtual void func(int val=1) { std::cout"<<val<<std:endl; } virtual void test() { func(); }};class B : public A{public: void func(int val=0) { std::cout"<<val<<std:原创 2016-06-24 20:32:20 · 628 阅读 · 0 评论 -
C/C++知识点汇总
1.C++中类对象的内存布局和占用空间:a.非静态成员变量总合。b.编译器为了CPU计算,作出的数据对齐处理(可用#pragma pack(n)来设定变量的对齐方式)。c.为了支持虚函数,产生的额外负担。//例子:#pragma pack(2)class BU{ int number; //4 union UBffer {原创 2016-06-04 10:58:03 · 1380 阅读 · 0 评论 -
浅拷贝与深拷贝 拷贝控制总结
class A{ int i;};class B{ A *p;public: B(){p=new A;} ~B(){delete p;} /* B(const B &temp) { p=temp.p; } */};void sayHello(B x){}int main(){ B b; sayHello(b); return 0;}//程原创 2016-06-13 18:33:26 · 898 阅读 · 0 评论