关键字:
explicit 不允许隐式的转化(参考:http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html)
例如:
class String {
String ( int n ); //本意是预先分配n个字节给字符串
String ( const char* p ); // 用C风格的字符串p作为初始化值
}
下面两种写法编译通过,是正常的初始化方式:
String s2 ( 10 ); //OK 分配10个字节的空字符串
String s3 = String ( 10 ); //OK 分配10个字节的空字符串
以下声明方式为隐式的声明方式:
String s4 = 10; //编译通过,也是分配10个字节的空字符串
String s5 = ‘a’; //编译通过,分配int(‘a’)个字节的空字符串
如果加入explicit
class String {
explicit String ( int n ); //本意是预先分配n个字节给字符串
String ( const char* p ); // 用C风格的字符串p作为初始化值
}
只能用正常的声明方式,不能隐式的声明了。
this 指针
每个对象占用的存储空间仅为该对象的数据成员,不包括成员函数代码所占空间。
不同对象可以调用同一个成员函数,因此需要this指针,指向当前被调用的成员函数所在对象的起始地址,从而获取该对象的数据和成员函数,甚至其本身。
virtual 虚函数
通过指向派生类的基类指针访问派生类中同名覆盖成员函数,需要将基类的同名函数声明为虚函数。
获取最小精度函数:
#include <limits>
//.
//.
//.
std::numeric_limits<Dtyoe>::min();