类和对象(2)
-
静态变量有时候也叫
class variables
静态变量在类中被声明,只是创建了一个拷贝而已
静态数据成员不可以是mutable的
静态数据成员必须在类外显式地定义,否则不会被构造
dataType class Name :: memberName = value;
类内声明需要
static
,类外定义不需要如果静态数据成员是内联的,可以在类内初始化,但这是一次性的
如果创建了一个对象,静态数据变量可以通过点运算符或指针运算符访问
如果在静态成员函数中使用非静态变量,会导致编译时错误
如果要在类内使用静态成员数据,函数必须是静态成员函数
静态成员函数可以在main函数中,通过
类名+作用域解析符
直接访问即使类的对象没有被创建,可能使用静态成员函数和静态数据
静态成员函数没有this指针,不能是虚函数,不能被重载,不能被声明为const、volatile或const volatile
静态成员,既可以用对象名引用,也可以用类名引用
-
常数据成员的值必须初始化,而且不能改变,所以只能通过构造函数成员初始化列表的方式实现
常成员函数中,const在声明和定义时都要出现
-
友元函数,不是类的成员函数,但可以访问private变量,但只是单向关系
派生类的友元函数,可以访问基类的非私有成员,但不能访问私有成员
基类的友元函数,不能访问派生类的成员
-
protected继承,父类private的部分对子类是可见的,也是private的
private继承,父类private的部分对子类是不可见的,“更private的private”
-
子类可以赋值给父类,父类不能直接赋值给子类(多的可以给少的) 所以子类调用父类的拷贝构造的时候,直接传入子类对象,然后把除了父类之外的值单独拿一下 赋值运算符重载:子类的operator=必须显式调用父类的operator=完成父类的赋值
base::operator=(s); _age=s._age; ...
-
指向基类的指针,可以用派生类的地址初始化 这是因为,会发生指针从派生类到基类的隐式转换(变的是右值)