const:
用于成员函数,表示该函数不会修改类的成员变量。
示例:
class MyClass {
public:
void myFunction() const {
// 不能修改成员变量
}
};
static:
用于类的成员函数,表示该函数属于类而不是类的实例。
静态成员函数不能访问非静态成员变量。
示例:
class MyClass {
public:
static void myFunction() {
// 可以访问静态成员变量
}
};
virtual:
用于类的成员函数,表示该函数可以在派生类中被重写。
示例:
class Base {
public:
virtual void myFunction() {
// 可以被派生类重写
}
};
class Derived : public Base {
public:
void myFunction() override {
// 重写基类的函数
}
};
override:
用于派生类中的成员函数,明确表示该函数是重写基类中的虚函数。
示例:
class Base {
public:
virtual void myFunction() {
// 基类的虚函数
}
};
class Derived : public Base {
public:
void myFunction() override {
// 明确重写基类的虚函数
}
};
final:
用于类的成员函数,表示该函数不能在派生类中被重写。
示例:
class Base {
public:
virtual void myFunction() final {
// 不能在派生类中被重写
}
};
class Derived : public Base {
public:
// 错误:不能重写 final 函数
// void myFunction() override {}
};
inline:
用于函数,建议编译器将函数内联展开,以减少函数调用的开销。
示例:
inline int add(int a, int b) {
return a + b;
}
noexcept:
用于函数,表示该函数不会抛出异常。
示例:
void myFunction() noexcept {
// 不会抛出异常
}
constexpr:
用于函数,表示该函数可以在编译时求值。
示例:
constexpr int square(int x) {
return x * x;
}
friend:
用于函数,表示该函数可以访问类的私有成员。
示例:
class MyClass {
private:
int secret;
friend void friendFunction(MyClass& obj);
};
void friendFunction(MyClass& obj) {
obj.secret = 42; // 可以访问私有成员
}
explicit:
用于构造函数,防止隐式类型转换。
示例:
class MyClass {
public:
explicit MyClass(int x) {
// 只能显式调用
}
};
void func(MyClass obj) {}
int main() {
// MyClass obj = 10; // 错误:不能隐式转换
MyClass obj(10); // 正确:显式调用
func(MyClass(10)); // 正确:显式调用
}