(*) 类最简单的定义,定义一个新的类型和新的作用域
(*) 类的初始化列表,初始化顺序和定义的顺序相同,如下图先初始化b,因为它先定义
class B
{
B(): a(0), b(0)
{
}
public:
int b;
int a;
}
(* ) 类的this指针:类的成员函数都有一个隐含的形参,即指向该类对象的一个指针,这个隐含的形参为this,当需要将一个对象作为整体引用而不是一个类成员时,则需要返回这个参数this。
(书上例子)
class Screen
{
pubilc:
Screen& move(int x, int y)
{
return *this;
}
Screen& set(char)
{
}
}
可以如下调用:myScreen.move(0, 0).set('#');
在非const成员函数中,this是一个指向类类型的const指针(Screen* const this),可以更改其指向对象的值,但是不能改变其地址。而在const成员函数中,this是一个指向const类对象的const指针(const Screen* const)
class Screen
{
pubilc:
Screen& move(int x, int y)
{
return *this;
}
const Screen& move(int x, int y) const
{
return *this;
}
Screen& set(char){
return *this;
}
}
二者可以重载,const对象只能调用const成员,,但是构造函数无需定义成const
(*) 构造函数可以被重载,单形参构造防止隐式构造用explicit关键字定义构造函数
(*) 友元可以是对象也可以是函数。
友元重载:
extern int store(std::string);
extern void store(int)
class Screen
{
friend int store(std::string);
}
接受一个函数作为友元,另外一个无法对对象进行访问
(*) static成员只是与类关联,独立于这个类声明的所有对象,其作用域在类作用域内。
static可以私有,全局对象不能作为某个对象的私有成员。
因为static独立于对象存在,static函数没有对象this指针。
static数据成员不能在类中初始化,而const static可以,如:
class B
{
public:
static const int p = 30;
}
static成员类型可以是该类的类型
class B
{
public:
B test; //error
static B test; //ok
}