类的继承
1. 继承表示 : C++ 中继承可以使用 “:” 符号 , 格式为 "class 子类名称 : 父类名称{};"
//父类 class Parent{ }; //子类 //继承父类 Parent class Child : Parent{ };
2. 继承作用域 : 继承可以指定作用域 , private , protected , public , 如果不写作用域 , 那么该继承就是默认私有继承 ; 作用域符号写在 冒号之后 , 父类名称之前 ;
3. 私有 ( private ) 继承 : 如果继承的作用域是私有的 ( private ) , 那么继承的所有的方法都是私有的 , Parent 中的 public 和 protected 方法会变成私有的 , 外部无法访问该方法 ;
4. C++ 多继承 : Java 中只能进行单继承 , 但是在 C++ 中是可以继承多个父类的 ; 在多继承时 , 使用 “,” 将多个父类分隔即可 ;
5. C++ 多继承作用域 : 多继承中 , 每个父类的作用域都可以单独指定;
#pragma once //父类 class Parent{ public: void parent_method() { } }; //父类 class Parent1{ public: void parent1_method() { } }; //子类 //继承父类 Parent //继承作用域 : 默认私有继承 private class Child : private Parent, public Parent1{ };
方法的重写
1. 子类重写父类方法 : 如果继承的两个父类有相同的方法 , 在子类冲又定义了一个相同的方法 , 这就是重写父类的方法 ;
#pragma once using namespace std; //父类 class Parent{ public: void parent_method() { cout << " Parent parent_method " << endl; } }; //父类 class Parent1 { public: void parent_method() { cout << " Parent1 parent_method " << endl; } void parent_method1() { cout << " Parent1 parent_method1 " << endl; } }; //子类 //继承父类 Parent //继承作用域 : 默认私有继承 private class Child : private Parent, public Parent1 { public: void parent_method() { cout << " Child parent_method " << endl; } };
2.调用子类重写方法 : 调用子类重写的 “parent_method” 方法 , 其执行的是子类重写的方法 ;
3. 外部通过子类调用父类方法 : 如果调用的方法在子类中没有重写 , 那么调用的就是父类的方法 ;
//在栈内存中创建一个 Child 对象, 并调用其重写的父类的方法 Child child; //调用子类重写的父类的方法 child.parent_method(); //调用子类没有重写的父类方法 child.parent_method1();
4. 代码执行结果 : 调用子类重写后的方法 , 其调用的是子类的方法 , 如果调用子类没有重写的方法 , 那么调用的就是父类的方法 ;
Child parent_method Parent1 parent_method
子类中调用父类方法
1. 子类中调用父类的方法 : 使用 " 父类名称 :: 方法名() " 进行调用 , 该操作相当于 Java 中的 " super(); " 方法 ;
class Child : private Parent, public Parent1 { public: void parent_method() { //子类中调用父类的方法 , 该操作相当于 Java 中的 super 方法 Parent::parent_method(); Parent1::parent_method(); cout << " Child parent_method " << endl; }
2. 执行下面的代码 : 执行该子类实现的方法 , 该方法中先后调用了两个父类的方法 ;
//在栈内存中创建一个 Child 对象, 并调用其重写的父类的方法 Child child; //调用子类重写的父类的方法 child.parent_method();
3. 代码执行结果 : 因为子类冲调用了父类的方法 , 因此两个父类的 parent_method 方法被先后执行了 ;
Parent parent_method Parent1 parent_method Child parent_method
多态
1. 多态 : 声明 Parent1 父类对象 , 为其赋值一个 Child 对象 , 此时调用其 parent_method 方法 , 调用的是父类的方法 ;
//声明 Parent1 父类对象 , 为其赋值一个 Child 对象 Parent1* parent1 = new Child(); //此时调用其 parent_method 方法 , 调用的是父类的方法 parent1->parent_method();
2. 执行结果 : 其调用的是 Parent1 父类中定义的 parent_method 方法 , 没有调用子类实现的方法 ;
Parent1 parent_method
如果必须要调用子类实现的方法 , 这里就需要用到虚函数 ;