21xrx.com
2024-11-05 20:35:01 Tuesday
登录
文章检索 我的文章 写文章
C++实现哺乳动物类与人类、狗类以及猫类的派生
2023-07-06 16:03:59 深夜i     --     --
C++ 哺乳动物类 人类 狗类 猫类 派生

C++是一种流行的编程语言,它支持对象导向编程。在面向对象编程中,继承是一种非常重要的概念,使得程序员可以创建类的层次结构并重用现有的代码。本文将介绍如何使用C++实现一个哺乳动物类和它的三个派生类:人类、狗类和猫类。

首先,我们定义一个哺乳动物类。这个类将具有一些通用的属性和方法,例如名称、年龄、性别和声音。在C++中,我们使用class关键字来定义一个类。以下是一个哺乳动物类的基本定义:


class Mammal {

public:

  Mammal(const std::string& name, int age, char sex) :

    name_(name), age_(age), sex_(sex)

  

  const std::string& Name() const

    return name_;

  

  int Age() const

    return age_;

  

  char Sex() const

    return sex_;

  

  virtual void MakeSound() const = 0; // 纯虚函数

private:

  std::string name_;

  int age_;

  char sex_;

};

在这个类中,我们定义了三个变量:名称、年龄和性别,并且使用构造函数来初始化它们。此外,我们还定义了三个公共函数,分别用于返回名称、年龄和性别。我们还声明了一个纯虚函数MakeSound(),但没有实现它。这是因为MakeSound()的实现将依赖于派生类,它们将覆盖这个函数并实现自己的声音。

接下来,我们定义三个派生类:人类、狗类和猫类。这些类将继承Mammal类并添加自己的属性和方法。以下是三个类的定义:


class Person : public Mammal {

public:

  Person(const std::string& name, int age, char sex, const std::string& occupation) :

    Mammal(name, age, sex), occupation_(occupation)

  

  const std::string& Occupation() const

    return occupation_;

  

  virtual void MakeSound() const override

    std::cout << "Hello

private:

  std::string occupation_;

};

class Dog : public Mammal {

public:

  Dog(const std::string& name, int age, char sex, const std::string& breed) :

    Mammal(name, age, sex), breed_(breed)

  

  const std::string& Breed() const

    return breed_;

  

  virtual void MakeSound() const override

    std::cout << "Woof woof!" << std::endl;

  

private:

  std::string breed_;

};

class Cat : public Mammal {

public:

  Cat(const std::string& name, int age, char sex, const std::string& color) :

    Mammal(name, age, sex), color_(color)

  

  const std::string& Color() const

    return color_;

  

  virtual void MakeSound() const override

    std::cout << "Meow!" << std::endl;

  

private:

  std::string color_;

};

在这些类中,我们使用public关键字来声明继承关系。例如,Person类继承自Mammal类。我们还定义了一个新的成员变量:职业(人类)、品种(狗类)和颜色(猫类)。每个类还重写了Mammal类的MakeSound()函数,以便与它们自己的声音相匹配。

有了这些定义,我们现在可以创建实际的对象并调用它们的函数。以下是一个例子:


int main() {

  Mammal* mammal;

  Person person("John", 30, 'M', "Engineer");

  Dog dog("Spot", 5, 'F', "Labrador");

  Cat cat("Whiskers", 3, 'M', "White");

  mammal = &person;

  std::cout << "Name: " << mammal->Name() << std::endl;

  std::cout << "Age: " << mammal->Age() << std::endl;

  std::cout << "Sex: " << mammal->Sex() << std::endl;

  std::cout << "Occupation: " << dynamic_cast<Person*>(mammal)->Occupation() << std::endl;

  mammal->MakeSound();

  std::cout << std::endl;

  mammal = &dog;

  std::cout << "Name: " << mammal->Name() << std::endl;

  std::cout << "Age: " << mammal->Age() << std::endl;

  std::cout << "Sex: " << mammal->Sex() << std::endl;

  std::cout << "Breed: " << dynamic_cast<Dog*>(mammal)->Breed() << std::endl;

  mammal->MakeSound();

  std::cout << std::endl;

  mammal = &cat;

  std::cout << "Name: " << mammal->Name() << std::endl;

  std::cout << "Age: " << mammal->Age() << std::endl;

  std::cout << "Sex: " << mammal->Sex() << std::endl;

  std::cout << "Color: " << dynamic_cast<Cat*>(mammal)->Color() << std::endl;

  mammal->MakeSound();

  std::cout << std::endl;

  return 0;

}

在这个程序中,我们创建了一个包含三个Mammal类对象的指针数组。我们通过使用一个指向相应派生类的指针变量来调用每个对象的函数,使用dynamic_cast将指针转换为相应的派生指针类型。此外,我们调用类中的MakeSound()函数来显示每个对象的声音。

总之,使用C++实现一个哺乳动物类和它的三个派生类是一个方便而有效的方法,它可以帮助程序员简化代码并提高程序的可读性和可维护性。例如,我们可以将Mammal类的属性和方法添加到这些派生类中,以使它们共享相同的功能。这种继承关系也使得项目的功能扩展变得更加容易。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复