首页 > 试题广场 >

有以下程序

[单选题]
有以下程序
#include<iostream>
using namespace std;

class P {
    char nameP[30];
public:
    P(const char* name = "123") { strcpy(nameP, name); }
    const char* getName() {
        return nameP;
    }
    virtual const char* getType() {
        return "P";
    }
};
class B :public P {
    char nameB[30];
public:
    B(const char* n1, const char* n2) : P(n1) { strcpy(nameB, n2); }
    const char* getName() { return nameB; }
    const char* getType() {
        return "B";
    }
};
void showP(P* p) {
    cout << p->getType() << ":" << p->getName() << endl;
}

int main() {
    B b("book1", "book2");
    showP(&b);
    return 0;
}
程序运行后的结果是()
  • P:book1
  • B:book2
  • B:book1
  • P:book2
希望可以调一下格式,看得头晕
发表于 2019-11-12 15:18:59 回复(0)
p是基类指针,指向派生类对象。getType()是虚函数,这里是重写;getName()不是虚函数,这里是隐藏。
p->getType()调用派生类成员函数;p->getName()调用基类成员函数。
我的理解:重写调用函数看对象,隐藏调用函数看指针。

发表于 2020-03-08 10:57:42 回复(0)
基类和衍生类都有相同的非虚函数 getName,调用哪一个是根据指针类型决定而不是指向的对象类型决定的
发表于 2019-08-28 15:19:14 回复(0)
1.当子类和父类有同名的非虚函数时(可不同参数,不同返回类型),父类中的该函数在子类中被隐藏,无法由子类对象直接调出使用,只能由父类指针(此时父类指针可以指向子类)调出使用,即无法多态,指针什么类型,就调用那个类中的函数;
2.当子类和父类有同名返回类型的虚函数(可不同参数)时,父类中的该函数在子类中被隐藏,无法由子类对象直接调出使用,但可多态。
3.上述二者,其实该父类函数都在子类中被重定义了(不是重载),都被隐藏,只是虚函数能多态,非虚不行,不知道说的对不对。

发表于 2020-04-09 00:55:15 回复(1)
虚函数调用由派生对象决定,非虚函数调用由类决定。
发表于 2022-01-24 17:14:09 回复(0)
考察的就是多态的概念,基类指针指向子类对象的一种写法
发表于 2019-08-19 15:32:13 回复(3)
void showP(P *p)此函数的参数是个基类的指针,函数中getName()会调用基类的,而在初始化子类B时,先初始化了基类P,此时就为book1了。
发表于 2021-03-18 20:39:37 回复(0)
getname()函数不是虚函数,所以不能实现多态功能
发表于 2020-01-05 16:56:19 回复(1)
virtaul 函数,多态,但是我感觉答案有问题,nameB用的是strcpy(nameB,n2),写进去的应该是"book2"才对
发表于 2019-08-27 13:25:40 回复(4)
绕来绕去看的头晕
发表于 2024-06-06 21:20:28 回复(0)
不是虚函数,就不能实现多态,指针什么类型就调用什么类的函数
发表于 2023-09-17 18:10:28 回复(0)
:p(n1)是什么意思?
发表于 2022-02-12 17:36:41 回复(1)

getName()不是虚函数 调用父类的

发表于 2021-09-20 22:09:39 回复(0)
基类中的getName不是虚函数,所以基类指针不会经过虚函数表进行动态调用派生类的getName函数,如果基类的getName前面加上了virtual关键字,那么该选择第二个选项了。
发表于 2021-08-10 17:13:52 回复(0)
C++的重写类似于java中的重写。 C++的隐藏类似于java中的覆盖。 父类成员函数为虚函数,子类的同名函数是对父类函数进行重写。 父类成员函数和子类同名函数都不是虚函数,子类函数是对父类函数进行隐藏。 重写调用看对象指针的类型 隐藏调用看指针指向的对象的类型 个人观点~
发表于 2020-08-18 10:07:35 回复(0)
1.函数形参为指针类型
2.非虚成员函数的调用取决于指针类型
发表于 2020-06-25 09:35:48 回复(0)
考点  : 多态  待补充
发表于 2019-08-26 23:26:02 回复(0)