21xrx.com
2024-12-22 23:18:42 Sunday
登录
文章检索 我的文章 写文章
"包含友元函数的C++例子:单继承与多继承"
2023-07-10 15:33:27 深夜i     --     --
C++ 友元函数 单继承 多继承

C++是一种面向对象的编程语言,在其中友元函数被用来允许函数或类从其他类中访问私有的或受保护的成员。本文将给出两个C++例子:一个是单继承,另一个是多继承。

在单继承例子中,我们将创建一个基类和一个派生类。我们的基类将是一个汽车类,它将有私有的成员,例如“发动机容量”,以及公共的成员,例如“加速”和“刹车”。然后我们创建一个派生类,名为“跑车”,它将继承基类,并添加一些私有的成员,例如“最大速度”和“加速度”。

在这个例子中,我们将使用一个友元函数,名为“checkEngine()”,它将被用来检查汽车的发动机容量。首先,我们需要在基类中声明该函数为友元函数。如下所示:


class Car {

 private:

  double engineCapacity;

 public:

  void accelerate();

  void brake();

  friend void checkEngine(Car c);

};

void checkEngine(Car c)

  cout << "Engine capacity is: " << c.engineCapacity << endl;

这里我们看到了友元函数的定义,它接受一个Car类对象c,然后输出发动机容量。我们注意到,在Car类中,我们将checkEngine函数声明为友元函数。

然后,我们创建“跑车”类,派生自Car类,并添加一些私有的成员:


class RacingCar: public Car {

 private:

  double maxSpeed;

  double acceleration;

 public:

  void race();

};

注意到我们是通过“public继承”来使RacingCar继承Car类的。这意味着所有Car类中的公共和保护成员在RacingCar类中都可以被访问。

现在,我们在main函数中创建RacingCar类的对象,访问其公共成员,并调用checkEngine函数:


int main() {

 RacingCar myCar;

 myCar.accelerate();

 myCar.brake();

 myCar.engineCapacity = 3.0;

 checkEngine(myCar);

 return 0;

}

在输出屏幕上,你应该可以看到“Car的发动机容量是3.0”。

在多继承例子中,我们将创建两个简单的类:一个鸟类和一个哺乳动物类。但是,我们将使用继承来创建一个类,称为“蝙蝠”,它是这两个类的派生类。

我们的鸟类具有私有的成员“长翅膀”,而哺乳动物类具有私有的成员“长爪子”。同样,蝙蝠类会添加一些私有的成员,例如“飞行时间”和“体重”。

在这个例子中,我们将创建类中的一个友元函数,名为“showTraits()”,它将显示蝙蝠所继承的特征(特别是它的爪子和翅膀)。在这个例子中,我们将使用多个基类。


class Bird {

 private:

  string wingspan;

 public:

  void birdBehavior();

  friend void showTraits(Bird b, Mammal m);

};

class Mammal {

 private:

  string claws;

 public:

  void mammalBehavior();

  friend void showTraits(Bird b, Mammal m);

};

class Bat: public Bird, public Mammal {

 private:

  double flyTime;

  double weight;

 public:

  void batBehavior();

};

void showTraits(Bird b, Mammal m)

  cout << "Wingspan: " << b.wingspan << endl;

  cout << "Claws: " << m.claws << endl;

在这里,我们看到了友元函数的定义。请注意,友元函数参数列表中需要包含两个对象 - Bird对象和Mammal对象 - 从而允许它访问各自私有的成员。我们还可以看到,showTraits函数被定义为Bird和Mammal的友元函数。

现在,我们在main函数中创建Bat类的对象,访问其公共成员,并调用showTraits函数来显示其特征:


int main() {

  Bat myBat;

  myBat.birdBehavior();

  myBat.mammalBehavior();

  myBat.wingspan = "10 feet";

  myBat.claws = "sharp and curved";

  showTraits(myBat, myBat);

  return 0;

}

在输出屏幕上,你应该可以看到“Wingspan: 10 feet”和“Claws: sharp and curved”。

在这篇文章中,我们涵盖了两个示例 - 单继承和多继承 - 并展示了如何使用友元函数来访问类的私有成员。友元函数是一种非常强大的工具,它可以让C++编程更加灵活和可靠。

  
  

评论区

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