我读了一本书,其中涉及c ++中的成员函数绑定问题。
并给出了下一个示例:
void Window::oops() { printf("Window oops\n"); }
void TextWindow::oops() {
printf("TextWindow oops %d\n", cursorLocation);
Window win;
Window *winPtr;
TextWindow *txtWinPrt = new TextWindow;
win = *txtWinPrt;
winPtr = txtWinPtr;
win.oops(); // executes Window version
winPtr->oops(); // executes TextWindow or Window version;
我不明白为什么
win.oops
将执行窗口版本? win被定义为Textwindow。谢谢您的帮助。
最佳答案
这是由slicing引起的。如果分配给超类的对象,则子类中的信息将丢失。问题是这样的声明:
win = *txtWinPrt;
由于将子类(
TextWindow
)的对象分配给超类(Window
)的对象,因此将切掉不在TextWindow
中的所有Window
信息。关于c++ - C++成员函数绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5949555/