Junior
C++'ta metod aşırı yükleme ve yeniden tanımlama nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Yöntem Aşırı Yükleme (Method Overloading):
- Aynı sınıfta aynı isime sahip birkaç yöntem olmasına izin verir.
- İmza (parametre sayısı ve/veya tipleri) ile farklılık gösterirler.
- Dönüş tipi **anlamaz; aşırı yükleme için imza tanımında yer almaz.
- Belirli bir yöntemin seçimi, çağrı sırasında argümanların tipine göre derleyici tarafından belirlenir (statik bağlama).
class MyClass {
public:
void print(int a) {
// Tam sayı yazdır
}
void print(double d) {
// Ondalıklı sayı yazdır
}
void print(int a, int b) {
// İki tam sayı yazdır
}
};
Yöntem Ezme (Method Overriding):
- Türetilmiş sınıfın, temel sınıfta tanımlanmış bir yöntemi özelleştirilmiş şekilde sağlayabilmesine olanak tanır.
- Türetilmiş sınıftaki yöntem, aynı imzaya (isim, parametre sayısı ve tipi) ve aynı dönüş tipine sahip olmalıdır (kovaryant dönüş tipi dahil).
- Sanal fonksiyonlar (
virtual) ile kullanılır ve çok biçimlilik (polymorphism) sağlar. - Yöntemin gerçek uygulaması, çalışma zamanında (dinamik bağlama) belirlenir ve nesnenin gerçek tipine bağlıdır.
class Base {
public:
virtual void display() {
// Temel sınıfın uygulaması
}
};
class Derived : public Base {
public:
void display() override { // override anahtar kelimesi (C++11'den itibaren) hataları önlemeye yardımcı olur
// Türetilmiş sınıfta özgü uygulama
}
};
Ana farklar:
| Özellik | Yöntem Aşırı Yükleme | Yöntem Ezme |
|---|---|---|
| Kullanım Yeri | Aynı sınıf içinde | Temel ve türetilmiş sınıflarda |
| Yöntem Adı | Aynı | Aynı |
| İmza | Farklı | Aynı |
| Seçim Mekanizması | Statik bağlama (derleme zamanı) | Dinamik bağlama (çalışma zamanı) |
| Kullanım Amaçları | Farklı tipler için farklı işlemler | Türetilmiş sınıfta özgü uygulama |