1. 栈上对象 调用普通成员方法
普通成员方法需要通过类的对象实例(或指针、引用)来调用。
示例:
class MyClass {
public:void normalMethod() {std::cout << "普通成员方法被调用" << std::endl;}
};int main() {MyClass obj; // 创建对象实例obj.normalMethod(); // 通过对象调用MyClass* ptr = &obj; // 对象指针ptr->normalMethod(); // 通过指针调用MyClass& ref = obj; // 对象引用ref.normalMethod(); // 通过引用调用
}
2. 调用静态成员方法
静态成员方法(static
方法)属于类本身,无需对象实例,可直接通过类名调用。
示例:
class MyClass {
public:static void staticMethod() {std::cout << "静态方法被调用" << std::endl;}
};int main() {MyClass::staticMethod(); // 直接通过类名调用MyClass obj;obj.staticMethod(); // 也可通过对象调用(不推荐,易混淆)
}
3. 堆上对象 调用普通成员方法
示例:
class MyClass {
public:void method() {std::cout << "通过指针/引用调用" << std::endl;}
};int main() {MyClass* ptr = new MyClass(); // 动态分配对象ptr->method();delete ptr; // 释放内存MyClass obj;MyClass& ref = obj;ref.method();
}
4. 在类内部调用其他方法
类的方法可以直接调用本类的其他成员方法(包括私有方法)。
示例:
class MyClass {
private:void privateMethod() {std::cout << "私有方法被调用" << std::endl;}public:void publicMethod() {privateMethod(); // 直接调用私有方法}
};int main() {MyClass obj;obj.publicMethod(); // 输出 "私有方法被调用"
}
5. 调用常量方法(const
方法)
如果对象是常量(const
),只能调用标记为 const
的成员方法。
非常量,只能使用非const 方法
示例:
#include<iostream>using namespace std;class MyClass {
public:void nonConstMethod() {std::cout << "非 const 方法" << std::endl;}void constMethod() const {std::cout << "const 方法" << std::endl;}
};int main() {const MyClass constObj;MyClass noconstObj;// constObj.nonConstMethod(); // 错误:不能调用非 const 方法constObj.constMethod(); // 正确:调用 const 方法noconstObj.nonConstMethod(); // 正确:调用 非 const 方法//noconstObj.ConstMethod(); // 错误:调用 const 方法
}
6. 在继承中调用父类方法
子类可以直接调用父类的公有或保护方法。如果方法被重写(override),可通过作用域运算符 ::
显式调用父类版本。
示例:
class Parent {
public:void method() {std::cout << "父类方法" << std::endl;}
};class Child : public Parent {
public:void method() {std::cout << "子类方法" << std::endl;Parent::method(); // 显式调用父类方法}
};int main() {Child obj;obj.method(); // 先输出 "子类方法",再输出 "父类方法"
}