【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


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




目录
相关文章
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
402 15
|
10月前
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
758 12
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
313 8
|
存储 编译器 C++
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
本文介绍了面向对象编程中的多态特性,涵盖其概念、实现条件及原理。多态指“一个接口,多种实现”,通过基类指针或引用来调用不同派生类的重写虚函数,实现运行时多态。文中详细解释了虚函数、虚函数表(vtable)、纯虚函数与抽象类的概念,并通过代码示例展示了多态的具体应用。此外,还讨论了动态绑定和静态绑定的区别,帮助读者深入理解多态机制。最后总结了多态在编程中的重要性和应用场景。 文章结构清晰,从基础到深入,适合初学者和有一定基础的开发者学习。如果你觉得内容有帮助,请点赞支持。 ❤❤❤
1638 1
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
380 19
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
577 13
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
509 5
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
549 12
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
288 0