面对对象的三个主要特征: 封装,继承,多态。
而继承,通过继承机制,可以利用已有的数据或者方法来定义一个新的数据类型。
父类:已经存在的数据或者方法,叫做基类。
子类:由已经存在的类派生出来的新类,叫做派生类。
1 class a{ 2 3 }; 4 5 class b : public a{ 6 7 };
对于上面这两个类,a是基类,b是派生类,a是b的父类,b是a的子类。
注意:
1.父类的所有成员变量和成员函数,子类都拷贝了一份。但是父类的私有成员子类是没法访问的,父类的保护成员可以在子类中访问,当不可以在外部访问。
2.先构建父类,在构建子类,但会先析构子类,再析构父类。
3.在子类的初始化列表中构建父类,可以通过子类构造函数传递值给父类的方式初始化父类成员变量。
4.子类要访问隐藏的成员变量或方法,必须明确指出父类:例如Child.Father::show();
隐藏:如果子类定义了和父类一样的成员函数或者成员变量,子类会自动隐藏父类的相同版本。(重载)
重载和隐藏的区别:()
隐藏是父子类之间,不在同一个作用域,而重载是相同作用域
重载是函数名相同参数列表不同,而隐藏必须是函数名相同,参数列表也相同。
对于继承,有三种继承的方式:
1.公有继承:public,子类不会改变任何的访问限定,父类的私有成员子类没法访问,父类的公有成员子类也是公有的,父类的保护成员在子类也是保护的。
2.私有继承:private,父类的私有成员变量,子类没办法访问;父类的公有成员变量,在子类中变成私有;父类的保护成员变量在子类中变成私有。即父类的所有公有和保护成员,在子类中,都是私有。
3.保护继承:protected,父类的私有成员不可访问,父类的公有和保护都变成子类的保护。