在C++中,類方法的繼承和多態主要通過基類(父類)和派生類(子類)之間的關系來實現
繼承是面向對象編程的一個重要特性,它允許一個類(派生類)繼承另一個類(基類)的屬性和方法。這樣,派生類可以重用基類的代碼,同時還可以添加或覆蓋基類的方法。
#include<iostream>
class Base {
public:
void print() {
std::cout << "Base class method"<< std::endl;
}
};
class Derived : public Base {
public:
void print() {
std::cout << "Derived class method"<< std::endl;
}
};
int main() {
Base *base = new Base();
base->print(); // 輸出 "Base class method"
Derived *derived = new Derived();
derived->print(); // 輸出 "Derived class method"
Base *base_ptr = new Derived();
base_ptr->print(); // 輸出 "Base class method",因為print()方法不是虛函數
delete base;
delete derived;
delete base_ptr;
return 0;
}
多態是指允許使用基類指針或引用來操作派生類對象。為了實現多態,我們需要將基類的方法聲明為虛函數(virtual)。這樣,當通過基類指針或引用調用該方法時,會根據實際對象的類型來調用相應的方法。
#include<iostream>
class Base {
public:
virtual void print() {
std::cout << "Base class method"<< std::endl;
}
};
class Derived : public Base {
public:
void print() override {
std::cout << "Derived class method"<< std::endl;
}
};
int main() {
Base *base = new Base();
base->print(); // 輸出 "Base class method"
Derived *derived = new Derived();
derived->print(); // 輸出 "Derived class method"
Base *base_ptr = new Derived();
base_ptr->print(); // 輸出 "Derived class method",因為print()方法是虛函數
delete base;
delete derived;
delete base_ptr;
return 0;
}
在這個例子中,我們將Base
類的print()
方法聲明為虛函數。當我們通過Base
類指針調用print()
方法時,如果實際對象是Derived
類的實例,那么將調用Derived
類的print()
方法。這就是多態的體現。