📜  C++中的朋友函数和虚函数之间的区别(1)

📅  最后修改于: 2023-12-03 15:14:03.690000             🧑  作者: Mango

C++中的朋友函数和虚函数之间的区别

C++中的朋友函数和虚函数是两种不同的概念,它们分别有着不同的使用场景和特点。

朋友函数

朋友函数是指在一个类中可以访问另一个类的私有成员的非成员函数。朋友函数可以被声明在类的内部或外部,用关键字friend来进行声明。

class B {
    friend void A::function(B& b);  // 在类外部声明A::function为B的朋友函数
    // ...
};

在上述代码中,A::function()是一个非成员函数,但通过friend,我们可以让它访问到B类的私有成员。

虚函数

虚函数是一种在基类中声明、在派生类中实现的成员函数,它为多态的实现提供了基础。通过在虚函数前面加上virtual关键字,我们可以将其声明为虚函数。

class Base {
public:
    virtual void function() {}  // 声明为虚函数
};

class Derived : public Base {
public:
    void function() override {}  // 实现基类中声明的虚函数
};

派生类中实现的虚函数会覆盖基类中的声明,但是在派生类中也可以使用override关键字来显示地标记函数是重写基类中的虚函数。

区别

朋友函数和虚函数有着不同的使用场景和特点。

  1. 目的不同:朋友函数用来访问类中的私有成员,而虚函数用来实现多态。

  2. 声明位置不同:朋友函数可以在类的内部或外部声明,而虚函数只能在类内部声明。

  3. 范围不同:朋友函数可以是任何非成员函数,而虚函数只能是类的成员函数。

  4. 调用方式不同:朋友函数可以像普通函数一样调用,而虚函数需要被基类指针或引用调用。

  5. 实现方式不同:朋友函数没有什么复杂性,直接访问类的私有成员即可,而虚函数需要通过虚函数表进行实现,存在时间和空间上的额外开销。

总之,朋友函数和虚函数是两种不同的概念,每种都有其适用的场景和特点。只有在具体问题中,根据需求选择使用哪种机制,才能更好地编写出高质量的C++程序。