zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    匿名方法
    C# 正则表达式
    c# 预处理命令
    反射
    特性(attribute)
    c# 交换两个变量
    构造函数
    泛型
    Event事件
    委托
  • 原文地址:https://www.cnblogs.com/iloveyouforever/p/3445850.html
Copyright © 2011-2022 走看看