静态成员特点
(1)static数据成员在类的内部声明,但只能在类的外部定义,在类的外部不能指定static,在类的定义时候进⾏初始化;
(2)static数据成员只能在类的外部进⾏初始化(特例:当整型const static数据成员被常量表达式初始化时,就可以在类的内部进⾏初始化,但还需要在外部进⾏定义)。
(3) static数据成员可以是该成员所属的类类型,⽽⾮static数据成员只能⾃⾝类的引⽤或者指针。
static修饰的变量(4)static数据成员可以⽤作类成员函数的默认实参。
(5)static数据成员的值可以改变。
⼆、静态成员和⾮静态成员的区别:
(1) 静态变量使⽤ static 修饰符进⾏声明,在类被实例化时创建,通过类和对象都可以进⾏访问;
(2)不带有 static 修饰符声明的变量称做⾮静态变量,在对象被实例化时创建,通过对象访问;
(3) ⼀个类的所有实例的同⼀静态变量都是同⼀个值,同⼀个类的不同实例的同⼀⾮静态变量可以是
不同的值。
(4) 静态函数的实现⾥不能使⽤⾮静态成员,如⾮静态变量、⾮静态函数等。
三、静态成员函数的特点:
(1) static 成员函数没有 this 形参,它可以访问所属类的 static 成员,但不能访问⾮ static 成员。
(2)static成员函数既可以在类的内部定义,也可以在类的外部定义,在外部定义时,不能重复指定static保留字。
(3)static成员函数不能声明为虚函数,不能实现动态绑定
(4)static 成员函数不能声明为const,因为const是针对this是不是const⽽⾔的
(5)构造函数、析构函数不能为静态函数。
公有继承的私有成员不能被继承,⽆法访问
公有继承的保护成员,只能在派⽣类中访问,不能⽤派⽣类对象访问
私有继承的公有成员,成员被私有化,⽆法访问
(int&)b 是将b地址中对应的数据按照规定的int格式⽅式显⽰出来
pA2=static_cast<ClassA*>(pB); 类型转换⽆效
正确
pA2=pB; 类型转换⽆效
pA2=static_cast<ClassA*>(static_cast<ClassC*>(pB)); 转换有效
static_cast 的⽤法
static_cast < type-id > ( expression )
该运算符把expression转换为type-id类型,但没有运⾏时类型检查来保证转换的安全性。它主要有如下⼏种⽤法:
①⽤于中基类(⽗类)和(⼦类)之间指针或引⽤的转换。
进⾏上⾏转换(把派⽣类的指针或引⽤转换成基类表⽰)是安全的;
进⾏下⾏转换(把基类指针或引⽤转换成表⽰)时,由于没有动态类型检查,所以是不安全的。
②⽤于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发⼈员来保证。
③把空指针转换成⽬标类型的空指针。
④把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。
C++中的static_cast执⾏⾮的转换,⽤于代替C中通常的转换操作。因此,被做为显式使⽤。
C++中的reinterpret_cast主要是将数据从⼀种类型的转换为另⼀种类型。所谓“通常为操作数的位模式提供较低层的重新解释”也就是说将数据以存在形式的重新解释。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论