C++ 成员函数的类型



C++中类成员函数的类型

我们已经知道什么是成员函数,它们能做什么,如何定义成员函数 以及如何使用类对象 调用它们,现在让我们了解一些可以在 C++ 类中定义的特殊成员函数。以下是不同类型的成员函数:

  1. 普通的成员函数
  2. static静态函数
  3. const常量函数
  4. inline内联函数
  5. friend友元函数


C++ 中的普通成员函数

这些是基本成员函数,它们没有任何特殊关键字如 static 等作为前缀,所有具有以下形式的成员函数都称为普通成员函数

return_type functionName(parameter_list)
{
    函数体;
}


C++ 中的静态成员函数

static 是一个关键字,可以与 数据成员 以及成员函数一起使用,后面章节我们会深入学习staic关键字的用法,本节中我们仅学习其与成员函数的用法。

通过使用带 static 关键字前缀将函数设为静态,这些函数对整个类起作用,而不是对类的某个实例起作用。

可以使用对象和成员访问运算符. 来调用它,但是,使用类名和作用域解析运算符::来单独调用静态成员函数才是比较常见的用法。

例如:

class X
{
    public:
    static void f()
    {
        // 语句块
    }
};

int main()
{
    X::f();   // 使用类名直接调用静态成员函数f()
}

这些函数不能访问普通的数据成员和成员函数,只能访问static类型的静态数据成员和static成员函数,否则编译器会报错

它没有任何“this”关键字,这就是它无法访问普通成员的原因,后面我们将研究“this”关键字。



C++ 中的常量成员函数

后面我们会详细学习Const关键字(Const Keyword)的用法,顾名思义,Const关键字使变量保持不变,也就是说一旦定义,它的值便无法更改。

当与成员函数一起使用时,此类成员函数永远不能修改对象或其相关数据成员。

// 常量成员函数

void fun() const 
{
    // 语句块
}


C++ 中的内联函数

类中定义的所有成员函数默认声明为内联函数,我们将在下节中详细学习[内联函数]](http://www.yetaozi.cn/cpp/inline-functions)。



C++ 中的友元函数

友元函数实际上不是类成员函数,它只是声明在类的内部,前面加上friend前缀,通过这样,你可以通过该函数访问你类内的私有或保护成员变量和函数. 你可以将全局函数声明为友元,也可以将其他类的成员函数声明为友元。

例如:

class WithFriend
{
    int i;
public:
    friend void fun(); // 声明一个全局友元函数
};

// 这里不带::修饰符,它不属于WidthFriend类
void fun()
{
    WithFriend wf;
    wf.i=10;  // 在这个全局友元函数中,你可以调用类WidthFriend中的私有数据i
    cout << wf.i;
}

int main()
{
    fun(); // 在main函数中直接调用该友元函数fun()
}

因此,我们可以在友元函数中实例化类的对象来访问私有数据成员,同样地,我们也可以将其他类的函数设为友元函数,或者我们也可以将整个类设为友元类

class Other
{
    void fun();
};

class WithFriend
{
private:
    int i;
public:
    void getdata(); 
    
    // 声明一个Other类的友元函数,在Other::fun()中我们可以访问WithFriend的私有数据
    friend void Other::fun();   
    
    // 也可以将整个Other类声明为友元类,这样在整个Other类中可以随时访问WithFriend的私有数据
    friend class Other;  
};

当我们将一个类设为友元时,它的所有成员函数都会自动成为友元函数。

因为友元函数的特性,所以 C++ 不能被称为面向对象 语言,因为它违反了封装的概念。