C++学习——继承与派生

简介: C++学习——继承与派生

普通继承


例题:定义一个名为Phone的手机类,有如下私有成员变量:品牌、型号、CPU、电池容量,如下成员函数:构造函数初始化手机的信息。在此基础上派生出NewPhone类,派生类增加了两个新的私有数据成员,分别用于表示颜色和价格,增加了一个成员函数用来输出手机信息。


代码如下:

#include <iostream>
#include<string>
#include<Windows.h>
using namespace std;
class Phone
{
public:
  string pinpai;
  string xinghao;
  string CPU;
  string dianchi;
  Phone(string s1, string s2, string s3, string s4);
  void Print();
private:
};
Phone::Phone(string s1, string s2, string s3, string s4)
{
  pinpai = s1;
  xinghao = s2;
  CPU = s3;
  dianchi = s4;
}
void Phone::Print()
{
  cout << "手机的品牌是:" << pinpai << endl;
  cout << "手机的型号是:" << xinghao << endl;
  cout << "手机的CPU是:" << CPU << endl;
  cout << "手机的电池容量是:" << dianchi << endl;
}
class NewPhone :public Phone
{
  string color;
  string price;
public:
  NewPhone(string s1, string s2, string s3, string s4, string s5, string s6) :Phone(s1, s2, s3, s4), color(s5), price(s6)
  {
  }
  void Print() {
    Phone::Print();
    cout << "手机的颜色是:" << color << endl;
    cout << "手机的价格是:" << price << endl;
  }
};
int main()
{
  NewPhone B("华为", "mate", "很大", "1000mA", "黄色", "100000");
  B.Print();
  system("pause");
  return 0;
}

结果如下:



菱形继承


写一个菱形继承,如下图所示:



写出类的具体结构和方法。

//兽王
class AnimalKing 
{
public:
  int weight;
  int height;
  int leg;
  void getWeight() 
  { 
    cout << "请输入狮虎兽的体重:";
    cin>>weight;
  };
  void getHeight()
  {
    cout << "请输入狮虎兽的身高:";
    cin >> height;
  };
  void getLeg()
  {
    cout << "请输入狮虎兽的腿数:";
    cin >> leg;
  };
};
//老虎
class Tiger : virtual public AnimalKing 
{ 
public:
  void Putweight()
  {
    cout << "继承了老虎的体重"<< weight<< endl;
  }
  void Putheight()
  {
    cout << "继承了老虎的身高" << weight << endl;
  }
  void Putleg()
  {
    cout << "继承了老虎的腿数" << weight << endl;
  }
};
//狮子
class Lion : virtual public AnimalKing
{
public:
  void Putweight()
  {
    cout << "继承了狮子的体重" << weight << endl;
  }
  void Putheight()
  {
    cout << "继承了狮子的身高" << weight << endl;
  }
  void Putleg()
  {
    cout << "继承了狮子的腿数" << weight << endl;
  }
};
//狮虎兽
class Liger : public Tiger, public Lion
{
public:
  ~Liger()
  {
    cout << "狮虎兽诞生了!" << endl;
  }
};
int main()
{
  Liger a;
  a.Tiger::getWeight();
  a.Tiger::Putweight();
  a.Lion::getHeight();
  a.Lion::Putheight();
  a.Lion::getLeg();
  a.Tiger::getLeg();
  a.Lion::Putleg();
  a.Tiger::Putleg();
  return 0;
}


结果如下:


相关文章
|
9天前
|
C++ 开发者
C++学习之继承
通过继承,C++可以实现代码重用、扩展类的功能并支持多态性。理解继承的类型、重写与重载、多重继承及其相关问题,对于掌握C++面向对象编程至关重要。希望本文能为您的C++学习和开发提供实用的指导。
42 16
|
5天前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
22 5
|
27天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
46 4
2023/11/10学习记录-C/C++对称分组加密DES
|
2月前
|
编译器 C++ 开发者
【C++】继承
C++中的继承是面向对象编程的核心特性之一,允许派生类继承基类的属性和方法,实现代码复用和类的层次结构。继承有三种类型:公有、私有和受保护继承,每种类型决定了派生类如何访问基类成员。此外,继承还涉及构造函数、析构函数、拷贝构造函数和赋值运算符的调用规则,以及解决多继承带来的二义性和数据冗余问题的虚拟继承。在设计类时,应谨慎选择继承和组合,以降低耦合度并提高代码的可维护性。
39 1
【C++】继承
|
3月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
3月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
69 1
|
3月前
|
安全 编译器 程序员
C++的忠实粉丝-继承的热情(1)
C++的忠实粉丝-继承的热情(1)
25 0
|
5天前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
43 18
|
5天前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
31 13
|
5天前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
20 5