第十三周阅读程序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引用first_obj
    bref.Who();              //相当于first_obj.Who(),输出F
    bref=second_obj;         //将second_obj赋值给bref,实际上相当于赋值给fitst_obj
    bref.Who();              //所以在这里输出的时候是输出的first_obj.Who(),输出F
    Base *bp;                //构建一个基类的指针
    bp=&first_obj;           //对first_obj取地址
    bp->Who();               //指向类FirstDerived的成员函数Who()
    bp=&second_obj;          //对second_obj取地址
    bp->Who();               //指向类SecondDerived的成员函数Who()
    return 0;
}

运行结果:

知识点总结:

纯虚函数的定义:在虚函数声明末端加上   =0;

有纯虚函数的类叫做虚基类

学习心得:

这个阅读程序,很多人,包括我一看就认为输出结果是FSFS

但是仔细看一下, bref=second_obj;  这个语句

之前bref对first_obj做了引用,这里就相当于second_obj对fiest_obj进行的赋值,所以bref.Who()中,仍然输出的是F

所以最后输出结果是FFFS

时间: 2024-12-08 06:05:40

第十三周阅读程序3:纯虚函数的相关文章

第十三周阅读程序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

第十三周 阅读程序 4 运用虚函数的前后对比问题讲解(1)

/* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:d.cpp *作 者:张旺华 *完成日期:2015年5月27日 *版 本 号:v1.0 */ #include <iostream> using namespace std; class Vehicle //交通工具 { public: void run() const { cout << "run a vehicle. "<&

第十三周阅读程序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) {} //派生类数据成员

第十三周阅读程序4:继承与指针

问题及代码: #include <iostream> using namespace std; class Vehicle  //交通工具 { public:     void run() const     {         cout << "run a vehicle. "<<endl;     } }; class Car: public Vehicle  //汽车 { public:     void run() const     {  

第十二周阅读程序3:虚基类的构造函数

问题及代码: #include <iostream> using namespace std; class Base { public: Base(char i) { cout<<"Base constructor. --"<<i<<endl; } }; class Derived1:virtual public Base //虚基类 { public: Derived1(char i,char j):Base(i) { cout<

第十三周(-形状类族的中的纯虚函数)

/* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名:第十三周(-形状类族的中的纯虚函数) *作者:王忠 *完毕日期:2015.6.02 *版本:v1.0 * *问题描写叙述:写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形).Rectangle(矩形).Triangle(三角形).用例如以下的main()函数,求出定义的几个几何体的面积和. *输入描写叙述: *程序输出: #include <iostr

第十三周阅读项目(4):多态性与虚函数

(1)代码: #include <iostream> using namespace std; class Vehicle //交通工具 { public: void run() const { cout << "run a vehicle. "<<endl; } }; class Car: public Vehicle //汽车 { public: void run() const { cout << "run a car.

第十三周项目二-形状类族中的纯虚函数

写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形).Rectangle(矩形).Triangle(三角形).用如下的main()函数,求出定义的几个几何体的面积和. int main() { Circle c1(12.6),c2(4.9);//建立Circle类对象c1,c2,参数为圆半径 Rectangle r1(4.5,8.4),r2(5.0,2.5);//建立Rectangle类对象r1,r2,参数为矩形长.宽 Triangle t1(4.5,8.4),t2(3

第十三周项目2:形状类族中的纯虚函数

问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:project.cpp *作 者:陈文青 *完成日期:2015年6月3日 *版 本 号:v1.0 * *问题描述:写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形).Rectangle(矩形).Triangle(三角形). 用如下的main()函数,求出定义的几个几何体的面积和. *程序输入: *程序输出: */ #inclu