0038关于父类与子类中的一道题(牛客)

来源:互联网 发布:舞台音乐控制软件 编辑:程序博客网 时间:2024/06/05 22:45
求输入:
classA
{
public:
    voidfoo()
    {
        printf("1");
    }
    virtual voidfun()
    {
        printf("2");
    }
};
classB: publicA
{
public:
    voidfoo()
    {
        printf("3");
    }
    voidfun()
    {
        printf("4");
    }
};
intmain(void)
{
    A a;
    B b;
    A *p = &a;
    p->foo();
    p->fun();
    p = &b;
    p->foo();
    p->fun();
    A *ptr = (A *)&b;
    ptr->foo():
        ptr->fun();
    return0;
}
 

答案:B
1,首先声明为A类型的指针指向实际类型为A的对象,调用的肯定是A的方法,输出1 2,
2,然后声明为A类型的指针指向实际类型为B的对象,则非虚函数调用A的方法,输出1,虚函数调用实际类型B的方法,输出4
3,声明类型为A的指针指向实际类型为B的对象,进行一个强制类型转换,其实这种父类指针指向子类会自动进行类型转换,所以是否强制类型转换都不影响结构,原理同上一步,结果输出1 4
所以最终输出为121414
0 0
原创粉丝点击