c++ primer第12章类的一些知识点总结
1:关于inline函数
在类定义体内部定义的成员函数即为inline函数,假如说我们想定义一个成员函数为inline类型,那么可以这样做。声明为inline类型,并且函数的实现和类的定义放在一个文件中(提倡这样做),并且定义时也要指明是inline类型的。
//Example.h
class A{
void x(){……} //这是inline函数
inline void y(); //声明为inline类型的函数
};
inline void A:;x(){ ……} //在定义时仍然要指定是inlien类型的,并且提倡和类定义体放在一个文件中
2.关于类声明和类定义
在使用类之前必须要有类声明(最少的)。如果只有类声明而没有类定义,那么它是一个不完全类型
class X;//类声明
class X{……}; //类定义
不完全类型的使用是受限制的。 不能定义该类型的对象,只能定义该类型的指针或者引用,或者是定义(注意,不是声明)一个函数,这个函数的形参或者返回类型可以使不完全类型。。
3.const成员和const重载
类的非static成员函数默认是有this指针的,加入成员函数是const型,那么它的是真默认是const类型的,
class A{
void test() const {……}
};
则在test函数中this指针的形式应该是 const A* thsi=&对象,所以不能再const成员函数中去改变对象的数据成员.
基于const的函数重载有两种形式: 1: 基于成员函数是否为const,可以重载为一个成员函数 2:基于指针形参是否只想const可以重载一个函数
void f(int*);
void f(const int*);//这两个是重载函数
4.类作用域中名字查找
class A{
In x;
typedef int In; //这是错误的
};
5.隐式类型转换
构造函数的隐式类型转换可以通过explicit关键字终止
6.static成员
static成员的定义时在类定义外部,和类的成员函数同级别。也可以把它看做是类的成员函数的定义,因此它可以使用类的private成员
const static成员可以在类的定义体中指明它的值,但是只限于是常量表达式!!
static变量在类的定义体外部初始化的时候不需指明static关键字,否则错误。