我读了一本书,其中涉及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/

10-09 06:33