21xrx.com
2024-12-27 21:02:49 Friday
登录
文章检索 我的文章 写文章
C++中的友元函数和单/多继承示例
2023-07-03 04:08:48 深夜i     --     --
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++的这些功能使得代码更加灵活,可以创建复杂的类层次结构。

  
  

评论区

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