C++ 16 —— 虚函数
来源:互联网 发布:淘宝一年前的购买记录 编辑:程序博客网 时间:2024/06/15 19:50
源码
// 16Poly_Virtual.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "iostream.h"class Pet{public: virtual void Speak(){}};class Dog : public Pet{public: void Speak() { cout << "WangWang" << endl; }};void Feeding(Pet& p){ p.Speak();}//问题1. 什么叫做前绑定(early binding)和后绑定(later binding)?//问题2. virtual会自动继承吗?如果会,子类中还需要写明Speak是virtual吗?//问题3. vtable和vptr是指什么?多态是如何实现的?//问题4. vptr何时初始化?Feeding函数的参数可以传递(Pet p)吗?//问题5. 构造函数会是虚函数吗?析构函数会是虚函数吗?int main(int argc, char* argv[]){ printf("Hello World!\n"); return 0;}
问题1. 什么叫做前绑定(early binding)和后绑定(later binding)?
直接调用函数会导致前绑定。利用函数指针调用函数会导致后绑定。
问题2. virtual会自动继承吗?如果会,子类中还需要写明Speak是virtual吗?
会。不需要。
问题3. vtable和vptr是指什么?多态是如何实现的?
虚表和虚指针。虚表中存放的是所有虚函数的首地址,存放顺序和(继承顺序、函数的声明顺序)有关。每个派生类都有一个虚指针,存放对应虚函数的地址。
问题4. vptr何时初始化?Feeding函数的参数可以传递(Pet p)吗?
编译阶段。不可以
问题5. 构造函数会是虚函数吗?析构函数会是虚函数吗?
构造函数不能为虚函数,而析构函数可以且常常是虚函数。
阅读全文
0 0
- C/C++——虚函数
- C++——虚函数
- C#——函数
- C#——函数
- C#——函数
- C——函数
- C++——虚函数与纯虚函数
- C++——虚函数、多态
- c++——虚函数例子代码
- C++——多态&虚函数
- C/C++——多态性和虚函数
- C/C++--虚函数
- C语言函数—数学函数
- 【c#】—架构函数&&析构函数
- C/C++——strcmp函数实现
- C/C++——strcmp函数实现
- C/C++——友元函数
- C/C++—— C++中构造函数不能是虚函数的原因分析
- struts2+hibernate+spring配置版框架搭建以及简单测试(方便脑补)
- 线程死锁
- 数论题 (牛客网)
- Tensorflow learning 1 -- Installation without GPU on ubuntu 16.04
- 六款主流免费网络嗅探软件wireshark,tcpdump,dsniff,Ettercap,NetStumbler
- C++ 16 —— 虚函数
- Busybox下mdev配置说明
- HTML5 HTML 颜色名
- Android中的Fragment概述
- 第九章 函数
- UML
- Ajax的简单使用
- 线程安全和可重入函数
- Java设计模式之《代理模式》及应用场景