第十一章 C++成员函数与静态成员详解

简介: 第十一章 C++成员函数与静态成员详解

第十一章 C++成员函数与静态成员详解

1. 概述

在C++中,成员函数是定义在类内部的函数,用于操作类的对象。静态成员是属于整个类而不是类的对象的成员。本文将详细讲解C++中的成员函数和静态成员,并结合代码和实际案例进行演示。

2. 成员函数的定义和使用

2.1 成员函数的定义

成员函数由两部分组成:声明和定义。声明位于类的内部,在类的外部进行定义。

class MyClass {
public:
    // 成员函数的声明
    void memberFunction(int arg);
    // 其他成员和数据...
};
// 成员函数的定义
void MyClass::memberFunction(int arg) {
    // 函数体
}

2.2 成员函数的使用

成员函数通过一个特殊的指针this访问调用它的对象。可以使用.运算符来调用成员函数。

MyClass obj;
obj.memberFunction(10);

2.3 访问成员变量

成员函数可以直接访问类中的成员变量。对于非static的成员函数,可以直接使用成员变量的名称来访问。

class MyClass {
public:
    int value;
    void displayValue() {
        cout << "Value: " << value << endl;
    }
};

2.4 静态成员函数

静态成员函数是一种属于类而不是类的对象的函数。它们在编译时就存在,无需创建对象即可访问。

class MyClass {
public:
    static void staticFunction() {
        // 静态成员函数的函数体
    }
};
// 调用静态成员函数
MyClass::staticFunction();

2.5 常量成员函数

常量成员函数是一种不修改成员变量的成员函数。它可以保证在被调用时不会改变对象的状态。通过在声明和定义中加上const关键字来实现。

class MyClass {
public:
    void displayValue() const {
        // 输出值但不修改成员变量
        cout << "Value: " << value << endl;
    }
};

3. 示例案例:购物车程序

下面是一个简单的购物车程序示例,用于演示成员函数和静态成员的使用。

#include <iostream>
#include <vector>
using namespace std;
class Cart {
private:
    vector<string> items;
    static int itemCount;
public:
    Cart() {
        itemCount++;
    }
    ~Cart() {
        itemCount--;
    }
    void addItem(const string& item) {
        items.push_back(item);
    }
    void removeItem(const string& item) {
        for (auto it = items.begin(); it != items.end(); ++it) {
            if (*it == item) {
                items.erase(it);
                break;
            }
        }
    }
    void displayItems() const {
        if (items.empty()) {
            cout << "Cart is empty." << endl;
        } else {
            cout << "Items in cart:" << endl;
            for (const auto& item : items) {
                cout << "- " << item << endl;
            }
        }
    }
    static int getItemCount() {
        return itemCount;
    }
};
int Cart::itemCount = 0;
int main() {
    Cart cart1;
    Cart cart2;
    cart1.addItem("Apple");
    cart1.addItem("Banana");
    cart1.displayItems();
    cart2.addItem("Orange");
    cart2.displayItems();
    cart1.removeItem("Apple");
    cart1.displayItems();
    cout << "Total carts: " << Cart::getItemCount() << endl;
    return 0;
}

运行结果:

Items in cart:
- Apple
- Banana
Items in cart:
- Orange
Items in cart:
- Banana
Total carts: 1

以上示例代码中,我们定义了一个Cart类来表示购物车。它包含一个items向量用于存储添加的物品,并使用itemCount静态成员变量来记录购物车对象的数量。

通过调用成员函数addItem和removeItem,我们可以在购物车中添加和移除物品。调用成员函数displayItems可以显示购物车中的所有物品。

静态成员函数getItemCount可以返回购物车对象的总数。我们可以通过直接调用Cart::getItemCount()来获取购物车对象的数量信息。

相关文章
|
8天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
34 5
|
1月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
1月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
48 6
|
1月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
25 0
C++ 多线程之线程管理函数
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
28 3
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
195 1
|
1月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
34 1
|
1月前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
31 3
|
1月前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
47 3
|
1月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
20 3