第十一章 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()来获取购物车对象的数量信息。