【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )(一)

简介: 【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )(一)

类的继承


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


如果必须要调用子类实现的方法 , 这里就需要用到虚函数 ;




目录
相关文章
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
2410 2
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
314 4
|
算法 Linux C++
C++框架设计中实现可扩展性的方法
在软件开发中,可扩展性至关重要,尤其对于C++这样的静态类型语言。本文探讨了在C++框架设计中实现可扩展性的方法:1) 模块化设计降低耦合;2) 使用继承和接口实现功能扩展;3) 通过插件机制动态添加功能;4) 利用模板和泛型提升代码复用;5) 遵循设计原则和最佳实践;6) 应用配置和策略模式以改变运行时行为;7) 使用工厂和抽象工厂模式创建可扩展的对象;8) 实现依赖注入增强灵活性。这些策略有助于构建适应变化、易于维护的C++框架。
1256 2
|
存储 编译器 C++
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
本文介绍了面向对象编程中的多态特性,涵盖其概念、实现条件及原理。多态指“一个接口,多种实现”,通过基类指针或引用来调用不同派生类的重写虚函数,实现运行时多态。文中详细解释了虚函数、虚函数表(vtable)、纯虚函数与抽象类的概念,并通过代码示例展示了多态的具体应用。此外,还讨论了动态绑定和静态绑定的区别,帮助读者深入理解多态机制。最后总结了多态在编程中的重要性和应用场景。 文章结构清晰,从基础到深入,适合初学者和有一定基础的开发者学习。如果你觉得内容有帮助,请点赞支持。 ❤❤❤
1873 2
|
编译器 API C语言
超级好用的C++实用库之跨平台实用方法
超级好用的C++实用库之跨平台实用方法
406 6
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
291 1
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
531 1
|
C++ 存储 Java
C++ 引用和指针:内存地址、创建方法及应用解析
'markdown'C++ 中的引用是现有变量的别名,用 `&` 创建。例如:`string &meal = food;`。指针通过 `&` 获取变量内存地址,用 `*` 创建。指针变量存储地址,如 `string *ptr = &food;`。引用不可为空且不可变,指针可为空且可变,适用于动态内存和复杂数据结构。两者在函数参数传递和效率提升方面各有优势。 ```
390 3
|
编译器 C++
C++中执行父类构造方法的技术性探讨
C++中执行父类构造方法的技术性探讨
304 1
|
C++
C++ 避免多重定义的方法
C++ 避免多重定义的方法
292 0