21xrx.com
2025-06-21 12:46:36 Saturday
文章检索 我的文章 写文章
C++中的友元函数和单/多继承示例
2023-07-03 04:08:48 深夜i     14     0
C++ 友元函数 单继承 多继承 示例

在C++中,友元函数是一个非常有用的概念,它允许外部函数或类访问一个类的私有成员,而不需要使用该类的公共成员函数进行访问。这在某些情况下会非常有用,特别是在需要对类进行强制或类型转换时。

在C++中,友元函数可以被声明为全局函数,可以是类方法,也可以是另一个类的成员方法。访问权限取决于友元函数的声明,当一个函数被声明为某个类的友元函数时,它就可以访问该类的私有成员变量和私有函数。

让我们看一个简单的示例,调用两个类的友元函数。

class Class1
{
private:
  int num1;
public:
  friend void add(Class1 c1, Class2 c2);
};
class Class2
{
private:
  int num2;
public:
  friend void add(Class1 c1, Class2 c2);
};
void add(Class1 c1, Class2 c2)
{
  int sum = c1.num1 + c2.num2;
  cout << "The sum is: " << sum << endl;
}
int main()
{
  Class1 c1;
  c1.num1 = 5;
  Class2 c2;
  c2.num2 = 10;
  add(c1, c2);
  return 0;
}

上面的示例演示了两个类(Class1和Class2)的友元函数add。函数接受一个对象的实例作为参数,访问对象的属性并将它们相加,最后输出结果。在这个示例中,我们可以使用友元函数add来访问两个类的私有属性和方法。

除了友元函数,C++还提供了单继承和多继承。在单继承中,每个类只能从一个基类派生。这导致了一个类层次结构,其中每个类仅有一个父类,但可以拓展属性和方法。在多继承中,一个类可以从多个基类派生,这使得该类拥有多个父类的特性和方法。多继承有时会产生一些问题,如方法名称冲突等。

在下面的示例中,我们演示了一个单继承的类层次结构和一个多继承的类层次结构。

#include <iostream>
using namespace std;
class Animal
{
public:
  int legs;
  void move() cout << "Animal Moves" << endl;
};
class Dog : public Animal
{
public:
  void bark() cout << "Dog Barks" << endl;
};
class Bird : public Animal
{
public:
  void fly() cout << "Bird Flies" << endl;
};
class Pegasus : public Bird, public Animal
{
public:
  void fly() cout << "Pegasus Flies" << endl;
};
int main()
{
  Dog d;
  d.move();
  d.bark();
  Bird b;
  b.move();
  b.fly();
  Pegasus p;
  p.move();
  p.fly();
  return 0;
}

在上面的示例中,我们有多个类,每个类都有自己的属性和方法。在单继承的示例中,我们演示了动物的类层次结构,其中Dog类从动物类派生,从而获得继承者的属性和方法。在多继承的示例中,我们演示了Bird类和Animal类,两者都被Pegasus类继承,因此Pegasus类拥有Bird类和Animal类的所有属性和方法。

总结

在C++中,友元函数是一个非常有用的概念,可以访问类的私有成员。C++还提供了单继承和多继承,可以实现类层次结构。在单继承中,每个类只能从一个基类派生。在多继承中,一个类可以从多个基类派生。C++的这些功能使得代码更加灵活,可以创建复杂的类层次结构。

  
  

评论区