在 C++ 和 Python 中,物件導向程式設計(OOP)具有許多相似的語法。這裡介紹兩種語言中 OOP 的幾個關鍵特性及其相似的語法:
目錄:
1.類別定義
2.建立使用
3.繼承
4.覆寫
5.封包
C++ 和 Python 中的類別定義語法相似,C++ 需要用 class 關鍵字定義類別,而 Python 也是如此,但不需要顯式宣告類型。
C++:
class Animal {
public:
void makeSound() {
std::cout << "Some sound" << std::endl;
}
};
Python:
class Animal:
def make_sound(self):
print("Some sound")
在兩種語言中,創建物件的方式類似,使用類別名稱來初始化物件。
C++:
Animal myAnimal;
myAnimal.makeSound(); // 呼叫方法
Python:
my_animal = Animal()
my_animal.make_sound() // 呼叫方法
兩種語言都支持繼承,C++ 使用冒號 : 指定繼承的父類別,Python 則直接在類別定義中括號內指定父類別。
C++:
class Dog : public Animal {
public:
void makeSound() override {
std::cout << "Bark" << std::endl;
}
};
Python:
class Dog(Animal):
def make_sound(self):
print("Bark")
在 C++ 和 Python 中,子類別都可以覆寫父類別的方法。C++ 中使用 override 關鍵字明確表達覆寫,而 Python 直接在子類中定義同名方法即可。
C++:
class Dog : public Animal {
public:
void makeSound() override {
std::cout << "Bark" << std::endl;
}
};
Python:
class Dog(Animal):
def make_sound(self):
print("Bark")
C++ 提供 public、protected 和 private 關鍵字來控制成員的訪問權限,Python 通過前置底線 _(單一或雙重)來表示成員的保護級別(雖然在技術上,Python 沒有真正的私有變數,這只是約定俗成)。
C++:
class Person {
private:
std::string name;
public:
void setName(std::string n) {
name = n;
}
std::string getName() {
return name;
}
};
Python:
class Person:
def init(self, name):
self._name = name # 單一底線表示"protected"(非強制)
def set_name(self, name):
self._name = name
def get_name(self):
return self._name
C++ 和 Python 都支持多型。C++ 通常依賴虛擬函式來實現多型,而 Python 中每個方法天生都是虛擬函式,可以直接覆寫。
C++:
class Animal {
public:
virtual void makeSound() {
std::cout << "Some sound" << std::endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
std::cout << "Bark" << std::endl;
}
};
void playSound(Animal* animal) {
animal->makeSound();
}
Python:
class Animal:
def make_sound(self):
print("Some sound")
class Dog(Animal):
def make_sound(self):
print("Bark")
def play_sound(animal):
animal.make_sound()
C++ 和 Python 的 OOP 語法在某些方面相似,但也有許多不同點。了解這些語法上的異同有助於在兩者之間進行轉換。