Bir temel işaretçi veya türetilmiş bir sınıf nesnesini işaret eden bir temel başvuru yoluyla sanal bir yöntem çağrıldığında, temel yöntem önce ve sonra türetilmiş yöntem çağrılır. çağrılır. Birisi, türetilmiş sınıf yöntemini doğrudan çağırmak yerine bu davranışın neden uygulandığını açıklayabilir mi?C++ Kalıtım: İlk olarak temel yöntemlerin temel yöntemleri çağrılır ve daha sonra türetilen yöntem çağrılır.
class Parent{
private:
int money;
public:
void set_money(const int& m){
money = m;
}
virtual const int& get_money() const{
std::cout << "Parent version\n";
return money;
}
};
sınıf Çocuk
class Child : public Parent{
private:
int my_money;
mutable int family_money;
public:
void set_money(const int& m){
my_money = m;
}
const int& get_money() const{
family_money = my_money + Parent::get_money();
std::cout << "Child version\n";
return family_money;
}
void set_parent_money(const int& m){
Parent::set_money(m);
}
};
ana sınıfı Veli
int main(){
Child c;
c.set_parent_money(20);
c.set_money(50);
Parent *p = &c;
cout << "Pointer " << p->get_money() << endl;
Parent& pr = c;
cout << "Reference " << pr.get_money() << endl;
Parent po = c;
cout << "Object " << po.get_money() << endl;
return 0;
}
Çıktı
Parent version
Child version
Pointer 70
Parent version
Child version
Reference 70
Parent version
Object 20
Ebeveyn get_money alt öğesi get_money içinde diyorsunuz. – hank