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(); // 先輸出 "子類方法",再輸出 "父類方法"
}