Predict the output of following C++ programs.

Question 1

 1 #include<iostream>
2 using namespace std;
3
4 class Test1
5 {
6 int x;
7 public:
8 void show()
9 {
10 }
11 };
12
13 class Test2
14 {
15 int x;
16 public:
17 virtual void show()
18 {
19 }
20 };
21
22 int main(void)
23 {
24 cout<<sizeof(Test1)<<endl;
25 cout<<sizeof(Test2)<<endl;
26 return 0;
27 }

  Output:
  4
  8
  There is only one difference between Test1 and Test2. show() is non-virtual in Test1, but virtual in Test2. When we make a function virtual, compiler adds an extra pointer vptr to objects of the class. Compiler does this to achieve run time polymorphism (See chapter 15 of Thinking in C++ book for more details). The extra pointer vptr adds to the size of objects, that is why we get 8 as size of Test2.

Question 2

 1 #include<iostream>
2 using namespace std;
3 class P
4 {
5 public:
6 virtual void show() = 0;
7 };
8
9 class Q : public P
10 {
11 int x;
12 };
13
14 int main(void)
15 {
16 Q q;
17 return 0;
18 }

  Output: Compiler Error
  We get the error because we can’t create objects of abstract classes. P is an abstract class as it has a pure virtual method. Class Q also becomes abstract because it is derived from P and it doesn’t implement show().

  Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

  转载请注明:http://www.cnblogs.com/iloveyouforever/

  2013-11-27  15:41:28

最新文章

  1. Java借助Runtime调用外部程序阻塞的代码
  2. Guava的异常工具类--Throwables
  3. 让你的网站秒开 为IIS启用“内容过期”
  4. Linux实现ftp账号同时访问两个目录方法
  5. Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载
  6. 验证码 mewebstudio/captcha
  7. zw版【转发&#183;台湾nvp系列Delphi例程】HALCON OverpaintRegion1
  8. c++性能测试
  9. 11道php面试题
  10. python偏函数(functool.partail)
  11. 343. Integer Break -- Avota
  12. Castle Windsor 使MVC Controller能够使用依赖注入
  13. hdu Max Sum Plus Plus(dp+滚动数组)
  14. .NET之父 - Anders Hejlsberg
  15. 理解rem实现响应式布局原理及js动态计算rem
  16. 深入学习Redis(3):主从复制
  17. iframe实用操作
  18. Good Bye 2018 D. New Year and the Permutation Concatenation
  19. 从零搭建java后台管理系统(二)mysql和redis安装
  20. python技巧 python2中的除法结果为0

热门文章

  1. 2020 ICPC 沈阳站 I - Rise of Shadows 题解
  2. ELK集群之elasticsearch(3)
  3. [第二章]c++学习笔记4(复制构造函数)
  4. js中修改this指向的方法(call,apply,bind)
  5. Spark面试题(五)——数据倾斜调优
  6. xpath解析案例
  7. Maven 依赖调解源码解析(二):如何调试 Maven 源码和插件源码
  8. [loj2506]tree
  9. AotucCrawler 快速爬取图片
  10. tomcat去除项目访问路径限制