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