21xrx.com
2025-07-12 00:20:26 Saturday
登录
文章检索 我的文章 写文章
C++实现继承两个类的方法
2023-07-08 06:29:04 深夜i     13     0
C++ 实现 继承 方法

C++是一种强大的编程语言,支持多种编程方法和技术。其中,继承是一种重要的面向对象编程技术,可以通过继承一个类的属性和方法来扩展另一个类。在C++中,可以通过两种方式实现类的继承:公有继承和私有继承。

公有继承是指子类继承父类的公有属性和方法,私有继承是指子类继承父类的私有属性和方法。在本文中,我们将介绍两种方法来实现继承两个类。

方法一:使用公有继承

公有继承是C++中最常用的继承方式,它允许子类继承父类的公有属性和方法。下面是一个使用公有继承的例子:

class Shape {
public:
  virtual double area() = 0;
};
class Rectangle : public Shape {
private:
  double width;
  double height;
public:
  Rectangle(double w, double h)
    width = w;
    height = h;
  
  double area() {
    return (width * height);
  }
};
class Triangle : public Shape {
private:
  double base;
  double height;
public:
  Triangle(double b, double h)
    base = b;
    height = h;
  
  double area() {
    return (base * height * 0.5);
  }
};

在上面的代码中,我们定义了三个类:Shape、Rectangle和Triangle。Shape是抽象类,它定义了一个纯虚函数area(),用于计算形状的面积。Rectangle和Triangle类都通过公有继承继承了Shape类,并实现了自己的area()函数。

这样做的好处是,我们可以将不同的形状定义为不同的类,并且每个类都有自己的计算面积的方法。同时,我们还可以利用多态的特性,将这些类的对象存储在一个Shape类型的数组中,并对它们进行统一的操作。

方法二:使用私有继承

私有继承是一种比较少用的继承方式,它通常在需要实现“has-a”关系时使用。下面是一个使用私有继承的例子:

class Person {
protected:
  string name;
  int age;
public:
  Person(string n, int a)
    name = n;
    age = a;
  
  void display()
    cout << "Name: " << name << endl;
    cout << "Age: " << age << endl;
  
};
class Employee {
private:
  string id;
public:
  Employee(string i)
    id = i;
  
  void display()
    cout << "ID: " << id << endl;
  
};
class Manager : private Person, private Employee {
public:
  Manager(string n, int a, string i) : Person(n, a), Employee(i) {}
  void display() {
    Person::display();
    Employee::display();
  }
};

在上面的代码中,我们定义了三个类:Person、Employee和Manager。Person和Employee都是基类,而Manager是派生类。

在Manager类中,我们使用了私有继承,这意味着Manager类只能访问Person和Employee类中的私有属性和方法,而不能直接访问它们的公有属性和方法。这样设计的好处是,我们可以将Manager类理解为同时拥有一个人和一个员工的角色。而且,由于Person和Employee类都有一个display()函数,我们在Manager类中需要使用作用域解析运算符“::”来指定要调用的函数的来源。

总结

本文介绍了两种实现继承两个类的方法:公有继承和私有继承。公有继承是一种常用的继承方式,它允许子类继承父类的公有属性和方法。私有继承则用于实现“has-a”关系,让一个类拥有另一个类的功能和属性。在使用继承时,需要注意避免过度使用,以免导致代码混乱和维护困难。

  
  

评论区