C++ 类成员函数(方法)

C++ 中的类成员函数(方法)是与类相关联的函数,它们可以操作类的成员变量并实现类的行为。成员函数定义通常放在类的内部,也可以在类外部定义。成员函数通常用于操作类的数据成员或提供类的行为。本文主要介绍C++ 类成员函数。

1、成员函数(方法)声明

成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义。在类定义中定义的成员函数把函数声明为内联的,即便没有使用 inline 标识符。

例如,

#include<iostream> 
using namespace std;
#include <string>
class Foo {
public:
    std::string s;
    // 默认构造函数
    Foo() { std::cout << "default constructor" 
    << std::endl; }
    // 复制构造函数
    Foo(const Foo& foo) { std::cout << "copy constructor" 
    << std::endl; s = foo.s; }
    // 复制赋值运算符
    Foo& operator=(const Foo& foo) { std::cout 
    << "copy assignment operator" <<
    std::endl; s = foo.s; return * this;}
    // 移动构造函数
    Foo(Foo&& foo) { std::cout << "move constructor" 
    << std::endl; s = std::move(foo.s); }
    // 移动赋值运算符
    Foo& operator=(Foo&& foo) { std::cout 
    << "move assignment operator" 
    << std::endl; s = std::move(foo.s); return *this;}
};
int main() {
    Foo foo1;
    Foo foo2(foo1);
    foo1 = foo2;
    Foo foo3(std::move(foo1));
    foo2 = std::move(foo3);
}

2)类外部定义(通常用于函数较长时)

#include <iostream>
using namespace std;

class MyClass {
public:
    int x;

    // 构造函数
    MyClass(int val);

    // 成员函数声明
    void printValue();
    int getValue();
};

// 类外部成员函数定义
MyClass::MyClass(int val) : x(val) {}

void MyClass::printValue() {
    cout << "Value of x: " << x << endl;
}

int MyClass::getValue() {
    return x;
}

int main() {
    MyClass obj(10);
    obj.printValue();  // 输出 Value of x: 10
    cout << obj.getValue() << endl;  // 输出 10
    return 0;
}

2、使用范围解析运算符(::)

可以在类的外部使用范围解析运算符 :: 定义函数。

例如,

#include <iostream>
#include<cstring>
using namespace std;
class Person
{
    string name;
    int age;
    char sex;
// 成员函数声明
public:
    void Register(string,int,char);
    void ShowMe();
    void Input();
    string ID;
};
// 成员函数定义
void Person::Register(string na,int ag,char se)
{
    name=na;
    age=ag;
    sex=se;
}
void Person::ShowMe()
{
    cout<<name<<" "<<age<<" "<<sex<<endl;
}
void Person::Input()
{
    cin>>name>>age>>sex;
 } 
int main()
{
    Person person1,person2;
    person1.Input();
    person2.Register("cjavapy",19,'m');
    person1.ShowMe();
    person2.ShowMe();
    return 0;
}

3、类成员函数的访问控制

成员函数可以访问类的私有(private)和保护(protected)成员。通常使用 public 访问控制符将成员函数暴露给外部使用,privateprotected 用于限制对外访问。

#include <iostream>
using namespace std;

class MyClass {
private:
    int privateValue;
public:
    int publicValue;

    MyClass(int val1, int val2) : privateValue(val1), 
    publicValue(val2) {}

    void setPrivateValue(int val) { privateValue = val; }
    void printValues() const { cout << "Private: " << 
    privateValue << ", Public: " << publicValue << endl; }

protected:
    int protectedValue;
};

class DerivedClass : public MyClass {
public:
    DerivedClass(int val1, int val2) : MyClass(val1, val2) {}

    void setProtectedValue(int val) { protectedValue = val; }
    void printProtectedValue() const { cout << "Protected: "
    << protectedValue << endl; }
};

int main() {
    MyClass obj1(10, 20);
    obj1.printValues();
    obj1.setPrivateValue(30);
    obj1.printValues();

    DerivedClass obj2(100, 200);
    obj2.setProtectedValue(300);
    obj2.printProtectedValue();

    return 0;
}

4、常成员函数(const member functions)

常成员函数是指不会修改类的成员变量的函数,可以在常量对象上调用。

#include <iostream>
using namespace std;

class MyClass {
public:
    int x;

    MyClass(int val) : x(val) {}

    // 常成员函数
    void printValue() const {
        cout << "Value of x: " << x << endl;
    }
};

int main() {
    // 创建对象并初始化
    MyClass obj(10);

    // 调用常成员函数
    obj.printValue();  // 输出 Value of x: 10

    // 访问公有成员变量
    cout << "x is: " << obj.x << endl;  // 输出 x is: 10

    return 0;
}

5、静态成员函数(static member functions)

静态成员函数属于类本身,而不是类的实例,因此它不能访问非静态成员。静态成员函数只能访问静态成员变量和其他静态成员函数。

#include <iostream>
using namespace std;

class MyClass {
public:// 静态成员变量,记录对象数量
    static int count;  

    MyClass() {
        count++;  // 每创建一个对象,count增加
    }

    static void printCount() {
        cout << "Count: " << count << endl;  // 打印当前对象数量
    }
};

int MyClass::count = 0;  // 静态成员变量初始化

int main() {
    MyClass obj1;  // 创建第一个对象,count变为1
    MyClass obj2;  // 创建第二个对象,count变为2
    MyClass obj3;  // 创建第三个对象,count变为3
    // 输出 Count: 3,打印当前对象数量
    MyClass::printCount();  

    return 0;
}

推荐阅读
cjavapy编程之路首页