Điều này làm tôi ngạc nhiên một chút, nhưng tôi đã chơi xung quanh với một số mã và phát hiện ra rằng, ít nhất là trên máy tính của tôi, khi một hàm chấp nhận một lớp cha bằng cách tham chiếu và bạn vượt qua một thể hiện con. t xảy ra. Để minh họa:Việc truyền qua tham chiếu có luôn tránh vấn đề cắt không?
#include <iostream>
class Parent
{
public:
virtual void doSomething()
{
using namespace std;
cout << "Parent::DoSomething" << endl;
}
};
class Child : public Parent
{
public:
virtual void doSomething()
{
using namespace std;
cout << "Child::DoSomething" << endl;
}
};
void performSomething(Parent& parent)
{
parent.doSomething();
}
int main(int argc, char** argv)
{
Child myChild;
performSomething(myChild);
return 0;
}
Điều này in ra Child::DoSomething
.
Như tôi đã nói, tôi hơi ngạc nhiên. Ý tôi là, tôi biết rằng việc chuyển qua tham chiếu là như các con trỏ đi qua (nhưng an toàn hơn nhiều trong sự hiểu biết của tôi), nhưng tôi không biết tôi vẫn giữ được sự tốt đẹp đa hình khi làm như vậy.
Tôi chỉ muốn đảm bảo, điều này có nghĩa vụ phải xảy ra hay là một trong những kiểu "nó hoạt động trên máy của tôi"?
Đó không phải là những gì "cắt". Ngoài ra, mã đó thậm chí còn biên dịch? 'Sử dụng std; 'là gì? –
Có nghĩa là nó là 'sử dụng không gian tên std'. Tôi nghĩ rằng tôi đã có thể nhận được điểm trên, nhưng làm sạch mã cho lợi ích tổng thể cho trang web. – Anthony