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