成员访问属性限定符:
- public(公有):提供了与外界的接口,公有成员可以被本类中的成员使用和访问,也可以被对象直接使用和访问。
- private(私有):保持了类的封装性,只可以被本类中的成员或友元函数和友元类使用和访问。不可以被对象直接使用和访问。
-
protected(保护):满足类的继承性,在private的访问权限上,可以被派生类内访问。
note:若在类中不自定义成员访问属性限定符,编译器会默认所有成员都为private
继承方式:
- public(公有):基类public成员,protected成员,private成员的访问属性在派生类中保持不变:public, protected, private
- private(私有):基类public成员,protected成员,private成员的访问属性在派生类中变为:protected, protected, private
-
protected(保护):基类public成员,protected成员,private成员的访问属性在派生类中变为:private, private, private
对于单个类来说,protected和private属性限定没有什么区别。但是对于继承来说,父类的protected成员可以被子类内访问,但是父类的private成员不能被子类访问。但是不管是哪种继承方式,在子类内部依然是可以访问父类的public和protected成员的,但是对于子类本身来说,这些从父类继承下来的属性已经确定了。
构造函数
- 定义类的构造函数或拷贝构造函数后,定义对象时就不会调用编译器自定义的默认构造函数。
- 子类继承父类后,若父类没有自定义构造函数或拷贝构造函数,或者父类自定义的构造函数没有参数(或者每个形参都有默认实参)子类也可以不用自定义构造函数。如果父类提供了需要实参的构造函数,那么子类必须要自定义构造函数,并在子类的初始化列表中初始化父类。
note:没有定义构造函数,自定义了拷贝构造函数,即等于定义了需要实参的构造函数。拷贝构造函数=带参的构造函数
当子类自定义了拷贝构造函数和拷贝赋值函数后,编译器就会使用自定义的函数进行运算。如果你没有在自定义的函数中设置对父类的复制,那么复制后得到的对象就是不完整的(错误的)。但是如果没有自定义子类的拷贝构造函数和拷贝赋值函数,编译器会使用默认的拷贝构造函数和拷贝赋值函数,会把子类和子类继承的父类成员每个字节进行复制。
派生类成员覆盖
访问派生类的成员:
类内:直接通过成员名访问 (成员名)
类外:直接通过成员名访问 (对象名.成员名)
访问基类中的成员:
类内:通过基类作用域限定符访问 (基类::成员名)
类外:通过基类作用域限定符访问 (对象名.基类::成员名)