1.函数可以直接在形参中赋值
2.一旦形参中出现一个默认参数,则从此位置开始往右所有的形参都要有默认参数
3.函数声明和实现只能有一处有默认参数
public:类内 可以;类外可以
protected:类内 可以;类外不可以,子类可以
private:类内 可以;类外不可以,子类不可以
类外指的是p1.name
通常变量设置为私有,通过公共函数进行读写。
继承会将父类中的所有成员进行继承,对于父类的private类型的成员变量,子类中含有此成员(占用大小)但是子类不可访问此成员。
构造函数
可以有参数(有参构造),可以重载,也可以无参数(无参构造),如果自己没有实现,编译器会自动实现无参构造。当类被实例化后构造函数被自动调用。
如果自己实现了有参构造函数,则编译器不再自动生成无参构造函数。
如果自己实现了拷贝构造函数,则编译器不再自动生成任何构造函数。
拷贝 > 有参 > 无参,如果自己实现了高级,编译器不会自动生成更低级。
析构函数
不可以有参数,因此不能重载。
类的静态成员变量,使用static关键字修饰。
类内声明,类外初始化
所有对象共享同一份数据
静态成员变量的访问方式两种:1.对象访问2.类名::成员变量
静态成员函数只能访问静态成员变量,无法访问非静态成员变量,因为非静态成员变量是具体某个对象的变量,而静态成员变量是
属于类的变量。
静态成员函数的访问方式两种:1.对象访问2.类名::成员函数
成员变量和成员函数分开存储。
非静态成员变量属于类的对象上,静态成员变量不属于类的对象上
非静态成员函数和静态成员函数都不属于类的对象上
this指针(指针常量,指针的指向不可修改)隐含在每个成员函数的内部,哪个对象调用此成员函数,此成员函数的this指针就指向哪个对象。
void show() const 也称常函数 常函数内部不可以修改成员属性!
此const也用来修饰this指针,表明指针指向的值不可修改
常对象只能调用常函数。
函数模板实际上就是类型参数化
在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual函数返回类型 函数名(参数表) {函数体};实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。在派生类中被重新定义的成员函数必须和基类中的函数函数名,参数类型以及数量等完全一样才行,否则,无法实现父类指针调用子类同名方法。( virtual伴随着指针和引用一起)
对于函数重载而言,只需函数名一样,子类对象中的同名函数(函数重载)会覆盖父类中对应的函数,此时可以通过父类的作用域运算符调用父类中的同名函数。