posts - 34,comments - 2,trackbacks - 0
一、类型转换

1、强制类型转换::类型不同,而且不属于基本数据类型(int double...)时,经常需要强制类型转换
①、显示强制类型转换
TYPE b = (TYPE) a;

C++中强制类型转换函数有4个:
const_cast(用于去除const属性),
static_cast(用于基本类型的强制转换),
dynamic_cast(用于多态类型之间的类型转换),
::dynamic_cast < type-id > ( expression )   该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;   如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。   dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
reinterpreter_cast(用于不同类型之间的指针之间的转换,最常用的就是不同类型之间函数指针的转换)。

2、隐式强制类型转换 
自动类型转换分两种情况:
①,不同类型的数据进行运算时,系统会自动将运算优先级别低的转换成级别高的,结果和运算级别高的数据类型一样。
②,赋值运算符两边类型不一样时,系统会自动将右侧表达式的类型转换成左侧的变量类型,然后再赋值


3、不允许的经过转换构造函数进行的隐式转换的发生。explicit   不能AAA = XXX


二、静态static


1 静态数据成员的类型可以是其所属类而非static 数据成员只能被声明为该类的对象的指针或引用例如

class Bar {
public:
private:
static Bar mem1; // ok
Bar *mem2; // ok
Bar mem3; // 错误
};

2 静态数据成员可以被作为类成员函数的缺省实参而非static 成员不能例如
extern int var;
class Foo {
private:
int var;
static int stcvar;
public:
// 错误: 被解析为非 static 的 Foo::var
// 没有相关的类对象
int mem1( int = var );
// ok: 解析为 static 的 Foo::stcvar
// 无需相关的类对象
int mem2( int = stcvar );
// ok: int var 的全局实例
int mem3( int = ::var );
};

 

静态成员函数::静态成员函数的声明除了在类体中的函数声明前加上关键字static 以及不能声明为const 或volatile 之外与非静态成员函数相同

(1)、出现在类体外的函数定义不能指定关键字static
(2)、静态成员函数没有this 指针
(3)、访问时用类::标识


三、修饰符

1、const
①、对类型 限定为常量
②、作为函数参数  限定参数不可改变或成员变量不变

2、typedef
①、类型的类别,不是简单的宏替换
②、定义结构体struct放在前面

3、static
.........

4、inline
内联函数:用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 一个小内存空间的函数非常受益。

5、extern
声明函数或者变量,让在另一文件中使用

6、volatile
每次使用时重新读取值
①. 并行设备的硬件寄存器(如:状态寄存器)   
②. 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)   
③. 多线程应用中被几个任务共享的变量


posted on 2011-11-30 20:32 Yu_ 阅读(385) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理