Почему чисто виртуальная функция инициализируется 0? - PullRequest
144 голосов
/ 28 января 2010

Мы всегда объявляем чисто виртуальную функцию как:

virtual void fun () = 0 ;

Т.е., оно всегда присваивается 0.

Что я понимаю, это то, что это инициализирует запись vtable для этой функции в NULL, и любое другое значение здесь приводит к ошибке времени компиляции. Это понимание правильно или нет?

Ответы [ 11 ]

1 голос
/ 28 января 2010

Ну, вы также можете инициализировать запись vtable, чтобы она указывала на фактическую функцию "

 virtual void fun()
 {
     //dostuff()
 }

Кажется интуитивно понятным, что запись vtable может быть либо определена, чтобы указывать ни на что (0), или на функцию. Если вы укажете свое собственное значение, оно, вероятно, приведет к тому, что оно будет указывать на мусор, а не на функцию. Но именно поэтому «= 0» разрешено, а «= 1» - нет. Я подозреваю, что Нил Баттерворт прав, почему "= 0" используется вообще

...