C++ Member Functions: Methods to Implement Class Behavior

什么是成员函数?

在C++中,是一种自定义的数据类型,它可以包含成员变量(描述对象的属性)和成员函数(定义对象的行为)。成员函数是类的“行为接口”,它决定了对象可以执行哪些操作。比如,一个Person类可能有nameage作为成员变量,而greet()就是一个成员函数,用于让对象“打招呼”。

成员函数的定义

成员函数可以在类内部定义(直接写在类的大括号内),也可以在类外部定义(需要通过“类名::”指定作用域)。

1. 类内定义(最常用)
直接在类中声明并实现函数:

class Person {
public:
    // 成员变量:描述对象的属性
    string name;
    int age;

    // 成员函数:定义对象的行为(打招呼)
    void greet() {
        // 成员函数可以直接访问类的成员变量
        cout << "Hello! I'm " << name << ", " << age << " years old." << endl;
    }
};

2. 类外定义(需指定作用域)
如果函数体较长,通常将声明放在类内,定义放在类外,并通过类名::明确函数归属:

class Person {
public:
    string name;
    int age;
    void greet(); // 类内声明
};

// 类外定义成员函数,需加作用域Person::
void Person::greet() {
    cout << "Hello! I'm " << name << ", " << age << " years old." << endl;
}

成员函数如何访问成员变量?

成员函数内部可以直接使用类的成员变量(无需额外声明),这是因为每个成员函数都隐含一个this指针——它指向调用该函数的对象。例如,this->name等价于name(编译器会自动添加this->)。

示例
假设我们创建两个Person对象:

Person p1, p2;
p1.name = "Alice";
p1.age = 20;
p1.greet(); // 调用p1的greet()

p2.name = "Bob";
p2.age = 25;
p2.greet(); // 调用p2的greet()

此时,this指针会分别指向p1p2,因此greet()会根据当前对象动态输出不同内容。

如何调用成员函数?

通过对象调用成员函数,使用“对象名.函数名()”语法(或指针/引用用“->”)。

示例

int main() {
    Person p;
    p.name = "Charlie";
    p.age = 30;
    p.greet(); // 输出:Hello! I'm Charlie, 30 years old.
    return 0;
}

特殊成员函数

除了普通成员函数,类还有几个特殊成员函数,用于初始化和清理对象:

1. 构造函数
创建对象时自动调用,用于初始化成员变量。构造函数名与类名相同,无返回值:

class Person {
public:
    string name;
    int age;

    // 构造函数:初始化name和age
    Person(string n, int a) {
        name = n;
        age = a;
    }

    void greet() {
        cout << "Hello! I'm " << name << ", " << age << " years old." << endl;
    }
};

// 使用构造函数创建对象
Person p("David", 35); // 直接初始化name和age
p.greet(); // 输出:Hello! I'm David, 35 years old.

2. 析构函数
对象销毁时自动调用,用于释放资源(如内存、文件句柄等)。析构函数名以“~”开头,无参数:

class Person {
public:
    ~Person() {
        cout << "对象已销毁,清理资源!" << endl;
    }
};

成员函数的访问权限

成员函数和成员变量一样,也有访问权限控制(public/private/protected):

  • public(公有):类内外都可调用,对外提供接口。
  • private(私有):仅类内部可调用,隐藏实现细节。
  • protected(保护):仅类内部和子类可调用(继承时使用)。

示例

class Person {
private:
    string secret; // 私有成员变量

    void internalGreet() { // 私有成员函数
        cout << "Secret: " << secret << endl;
    }

public:
    void setSecret(string s) {
        secret = s; // 公有函数可修改私有变量
    }

    void publicGreet() {
        internalGreet(); // 公有函数可调用私有函数
    }
};

int main() {
    Person p;
    p.setSecret("I'm 200 years old!"); // 合法:通过公有函数设置
    p.publicGreet(); // 合法:调用公有函数间接访问私有函数
    // p.internalGreet(); // 错误:无法直接调用私有函数
    return 0;
}

总结

成员函数是C++类的核心:
1. 它将“属性(成员变量)”和“行为”封装在类中,让对象具有特定功能。
2. 通过对象.函数名()调用,this指针确保函数与对象绑定。
3. 构造函数初始化对象,析构函数清理资源,public/private控制访问权限。

理解成员函数后,你就能用类创建更复杂的对象,并让它们执行各种自定义行为了!

Xiaoye