C++ 成员函数

2025 年 8 月 29 日 | 阅读 10 分钟

在 C++ 中,**成员函数** 是定义在类内部并与该类对象相关联的函数。它提供对类成员的访问,并可以直接操作和修改它们。这些函数定义了对象的行为,可以通过对象名和点运算符来调用。

成员函数可以通过作用域解析运算符在类内部或外部定义,用于操作或检索对象数据。根据访问说明符,这些函数可以是 public、private 或 protected。

语法

它具有以下语法:

在这个语法中,

  • 类名 (Class_name): 表示类名。
  • public: 表示一个访问说明符。
  • 返回类型 (returnType): 表示函数返回值的类型。
  • 函数名 (functionName): 表示函数名。
  • 参数 (parameters): 表示函数接收的输入值。

如果我们选择在类内部定义成员函数,可以直接在类内部进行定义。否则,我们必须使用作用域解析运算符 (::) 在 C++ 中类外部声明成员函数。

语法

它具有以下语法:

C++ 简单成员函数示例

让我们通过一个例子来说明 C++ 中的成员函数。

示例

编译并运行

输出

Volume of Dice1 : 210
Volume of Dice2 : 1560

说明

在这个例子中,我们定义了一个 Dice 类,它代表一个具有长度、宽度和高度的 3D 对象。之后,它包含设置这些尺寸和计算体积的成员函数。在 main() 函数中,创建了两个 dice 对象(Dice1 和 Dice2),使用 setter 函数设置它们的尺寸,并使用 getVolume() 函数计算并打印它们的体积。

定义成员函数

在 C++ 中定义成员函数主要有两种方式。

Member Function in C++
  • 类内部的成员函数
  • 类外部的成员函数

现在,我们将逐一讨论这些成员函数的声明。

类内部的成员函数

在 C++ 中,我们可以在类内部定义成员函数。这允许我们访问数据成员和其他成员函数。它可以被视为内联函数。成员函数属于特定的类或对象,用于操作该类的这些数据成员,从而实现与对象内部状态的交互和操作,或者与其他同类的对象进行交互。

如果我们想在类内部定义一个成员函数,可以将函数的签名和实现包含在类定义中。

语法

它具有以下语法:

C++ 类内部成员函数的示例

让我们通过一个例子来说明 C++ 中类内部的成员函数。

示例

编译并运行

输出

Name: Alice
ID: 101
Salary: 50000

说明

在这个例子中,我们定义了一个 Employee 类,它具有私有的数据成员(id、name 和 salary)。我们还初始化了公共成员函数来设置和显示员工详细信息。之后,setDetails 函数初始化员工数据,而 displayEmployee 则将其打印到控制台。在 main() 函数中,创建了一个 Employee 对象 emp1,设置了它的详细信息,然后打印输出。

类外部的成员函数

在 C++ 中,我们可以使用作用域解析运算符 (::) 在类外部定义成员函数,该运算符放在函数名之前。函数名需要包含类名,后跟作用域解析运算符。这些成员函数可以访问类的所有成员,如 public、private 和 protected 成员。

语法

它具有以下语法:

C++ 类外部成员函数的示例

让我们通过一个例子来说明类外部的成员函数。

示例

编译并运行

输出

Car Name: BMW
Car Model: 2025

说明

在这个例子中,我们定义了一个 Car 类,它具有私有的数据成员 brand_name 和 model_no。我们还使用公共成员函数来设置和显示这些详细信息。之后,setDetails() 函数初始化汽车的品牌和型号,而 showDetails() 则打印它们的详细信息。在 main() 函数中,创建了一个 Car 对象,它显示了汽车的信息。

成员函数的类型

C++ 中主要有五种类型的成员函数。

Member Function in C++

现在,我们将逐一讨论这些成员函数。

1) 简单成员函数

在 C++ 中,普通成员函数是最常用的成员函数类型。我们可以在类定义内部定义这些函数,并可以访问数据成员和其他类成员函数。

语法

它具有以下语法:

2) 静态成员函数

在 C++ 中,可以使用 static 关键字与函数名一起将函数定义为静态。如果我们将成员函数声明为静态,则只会创建一个函数的副本,并由所有类对象使用。这些函数可以在不创建类对象的情况下调用。

语法

它具有以下语法:

C++ 静态成员函数示例

让我们通过一个例子来演示 C++ 中的静态成员函数。

示例

编译并运行

输出

Employee No: 1
Employee No: 2
Employee No: 3

说明

在这个例子中,我们采用了一个 Employee 类,它包含一个静态数据成员 total。它用于跟踪创建的员工对象的总数。当实例化一个 Employee 对象时,构造函数会增加 total。在 main() 函数中,total 的值全局增加,并且对每个对象都相同。

3) 常量成员函数

在 C++ 中,常量成员函数是一个不会更改类任何数据成员的成员函数。通过使用const 关键字,我们可以在函数声明后声明成员函数。这个成员函数允许我们访问对象的 `const` 数据成员,但不能修改它们。

语法

它具有以下语法:

C++ 常量成员函数示例

让我们通过一个例子来说明 C++ 中的常量成员函数。

示例

编译并运行

输出

Car Name: BMW, Model: 2020, Color: Black

说明

在这个例子中,我们采用了一个 Car 类,它包含三个私有数据成员:car_name、car_model 和 car_color。之后,构造函数使用初始化列表初始化这些成员。show() 函数是一个常量成员函数,这意味着它不会更改任何数据成员。在 main() 函数中,创建了一个对象 c,show() 函数显示了它的详细信息。

4) 内联成员函数

在 C++ 中,内联函数是使用 inline 关键字定义的函数。在内联函数中,编译器会在编译时用函数的原始代码替换函数调用。这有助于减少函数调用开销,提高性能,特别是对于小型且频繁使用的函数。

语法

它具有以下语法:

C++ 内联成员函数示例

让我们通过一个例子来说明 C++ 中的内联成员函数。

示例

编译并运行

输出

Length: 12
Width: 4
Height: 7
Volume of the Cuboid: 336

说明

在这个例子中,我们定义了一个 Cuboid 类,它有三个私有成员:length、width 和 height。之后,它使用构造函数初始化这些维度。类内部定义了两个内联成员函数:volume() 和 show()。在 main() 函数中,创建了一个对象 c,其维度为 12、4 和 7,并使用 show() 函数打印其详细信息。

5) 友元成员函数

在 C++ 中,友元函数是在类定义外部定义,并在类内部使用 friend 关键字声明的。友元函数是非成员函数,但可以访问类的私有和保护成员。如果我们想将一个函数声明为友元函数,一个类可以授予它特殊的访问权限,使其能够操作类的内部数据。

语法

它具有以下语法:

C++ 友元成员函数示例

让我们通过一个例子来说明 C++ 中的友元成员函数示例。

示例

编译并运行

输出

Student Name: Alice
Age: 24
Marks: 75

说明

在这个例子中,我们采用了一个 Student 类,它包含私有数据成员:name、age 和 marks。之后,使用构造函数来初始化这些数据成员。showStudetails 函数被声明为该类的友元。在 main() 函数中,创建了一个 Student 对象并将其传递给友元函数以显示详细信息。

C++ 成员函数选择题

1) 下列哪个选项表示 C++ 中的内存函数?

  1. 全局函数
  2. 在命名空间内声明的函数
  3. 在类内声明的函数
  4. main() 函数中的函数
 

答案: c) 在类内声明的函数


2) 在 C++ 中定义成员函数的正确语法是什么?

  1. className::functionName()
  2. return_type ClassName::functionName()
  3. return_type ClassName.functionName()
  4. return_type functionName()
 

答案: b) return_type ClassName::functionName()


3) 下列哪个选项不是有效的成员函数类型?

  1. 可变
  2. 内联
  3. 静态
  4. Const
 

答案: a) Mutable


4) C++ 中的静态成员函数,以下哪个选项是正确的?

  1. 它们只能访问非静态成员
  2. 它们应该是私有的
  3. 它们只能通过对象调用
  4. 它们不能访问 this 指针
 

答案: d) 它们不能访问 this 指针


5) 在 C++ 中,用于定义静态成员函数的关键字是哪个?

  1. const
  2. friend
  3. static
  4. 内联
 

答案: c) static