第13周项目-阅读程序

 /*
*copyright (c)2015,烟台大学计算机学院
*All rights reserved
*文件名称:project.cpp
*作者:孙春红
*完成日期:2015年6月3日
*版本号:v1.0
*
*问题描述:程序阅读。
*输入描述:略。
*程序输出:略。
*/
1、阅读下面的程序,并写出运行结果
(1)虚函数

#include<iostream>
using namespace std;
class A {
int a;
public:
   A():a(5){}
   virtual void print()const { cout<<a;}//定义虚函数
};
class B: public A {
   char b;
public:
    B() { b='E'; }
    void print() const { cout<<b; }
};
void show(A &x) { x.print(); }
int main()
{
   A d1,*p; //在基类中声明了一个指针
   B d2;
   p=&d2;
   d1.print();
   d2.print();
   p->print();
   show(d1);
   show(d2);
   return 0;
}
运行结果:
5EE5E

(2)虚析构函数
#include <iostream>  
using namespace std;  
class BASE  
{  
private:  
    char c;  
public:  
    BASE(char n):c(n) {}  
    virtual ~BASE() { cout<<c; }  
};  
class DERIVED:public BASE  
{  
private:  
    char c;  
public:  
    DERIVED(char n):BASE(n+1),c(n) {}  
    ~DERIVED(){ cout<<c; }  
};  
int main(){  
    DERIVED d('X');  
    return 0;  
}    

知识点总结:
在不加虚析构函数时,析构函数只执行基类的,加上后,会先执行派生类的析构函数,然后再执行基类
的析构函数。
运行结果:
xy
(3)纯虚函数

#include <iostream>  
using namespace std;  
class Base  
{  
public:  
    virtual void Who() =0; //告诉系统这是一个纯虚数函数 
};  
class FirstDerived:public Base  
{  
public:  
    void Who() { cout<<"F"; }  
};  
class SecondDerived:public Base  
{  
public:  
    void Who() { cout<<"S"; }  
};  
int main()  
{  
    FirstDerived first_obj;  
    SecondDerived second_obj;  
    Base &bref=first_obj;  
    bref.Who();  
    bref=second_obj;  
    bref.Who();  
    Base *bp;  
    bp=&first_obj;  
    bp->Who();  
    bp=&second_obj;  
    bp->Who();  
    return 0;  
}  
运行结果:
FFFS
知识点总结:
纯虚函数是虚函数,而虚函数的作用是通过指针和引用来访问基类和派生类中的同名函数,所以在
 bref=second_obj;  
    bref.Who();  
时,只是复制了而没有运用引用或指针,所以输出的仍是F,而当指针指向bp=&second_obj;  
    bp->Who();  时,才输出了S。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值