首页 > 试题广场 >

下面程序的输出结果是( ) #in...

[单选题]
下面程序的输出结果是()
#include <iostream>
using namespace std;
class MD {
protected:
    float miles;
public:
    void setDist(float d){miles=d;}
    virtual float getDist(){return miles;}
    float square(){return getDist()*getDist();}
};

class FeetDist: public MD {
protected:
    float feet;
public:
    void setDist(float);
    float getDist(){return feet;}
    float getMiles(){return miles;}
};

void FeetDist::setDist(float ft) {
    feet=ft;    
    MD::setDist(feet/2);
}

int main() {
    FeetDist feet;
    feet.setDist(8);
    cout<<feet.getDist()<<","<<feet.getMiles()<<","<<feet.square()<<endl;
    return 0;
}
  • 8,4,16
  • 8,4,64
  • 8,8,64
  • 其他几项都不对
当子类和父类成员函数的返回值参数相同,函数名相同,有virtual关键字,则由对象的类型决定调用哪个函数。
因为虚函数的存在,这道题的getDist()调用的是子类的的成员函数。
发表于 2019-08-19 19:15:01 回复(0)
注意一点MD::setDist()函数调用。此时是没有父类的对象的,调用函数后设置的变量值当然也不属于父类对象。那他属于谁呢,没错他是子类继承自父类的变量,属于子类对象。本题其实漏掉了一个考点,如果同时创建一个父类对象并给父类对象的成员变量miles赋值。此时同时输出父类对象的getDist(),和子类的getMiles()函数,通过对比能更直观的理解继承中子类继承全部的父类内容。
编辑于 2020-04-16 10:24:25 回复(0)
子类对象,肯定子类的在虚函数表里面找,并且子类已经覆盖了父类的虚函数,所以调用子类虚函数。
编辑于 2020-12-25 01:19:24 回复(1)
基类中的虚函数被派生类实现了,square函数被继承到了派生类,所以调用派生类对象调用square函数时,里面调用的getDist函数应该是派生类的函数
发表于 2022-12-03 23:43:45 回复(0)
编译时按子类型去绑定执行的函数,多态没有起作用。
发表于 2022-03-01 07:59:35 回复(0)
这题有点细,在A和B两个之间纠结了一会,最后还是选了B。
发表于 2020-09-05 19:27:46 回复(0)
float不应该输出4.0嘛

发表于 2023-03-27 14:09:43 回复(0)
抽象类只是定义了一个接口setDist(),实际操作通过派生类来实现
发表于 2022-07-07 16:54:37 回复(0)
发表于 2021-11-21 18:17:11 回复(0)
因为使用对象访问,而不是指针或者引用,所以不涉及到覆盖。都是调用派生类里面的成员函数。square()调用的也是派生类的getdist(),注意不是覆盖来的。
发表于 2021-07-30 23:29:19 回复(0)
G++ 编译,本题输出的答案是8,4,64

发表于 2021-07-11 22:42:47 回复(0)
意思是float square(){return getDist()*getDist()中的getDist()其实调用的是子类对象的feet的getDist(),因为子类对象中此函数已经重载?
发表于 2020-09-15 21:34:08 回复(1)
feet.setDist(8);  > void FeetDist::setDist(float ft)
feet=ft;>cout<<feet.getDist()>float getDist(){return feet;}    8
MD::setDist(feet/2);void setDist(float d){miles=d;}  子类对象继承父类的miles,4>float getMiles(){return miles;}    4
float square(){return getDist()*getDist();>64
发表于 2020-08-04 09:24:38 回复(0)