当基类指针指向派生类对象时,利用基类指针调用派生类中与基类同名但被派生类重写后的成员函数时,调用的是( )。
A、基类的成员函数
B、派生类的成员函数
C、不确定
D、随机调用
这里没有写清楚是不是虚函数,是不是应该存在不确定性?
你这么一说,我心理也没底了。到底是故意的,还是出题失误呢?
当基类指针指向派生类对象时,利用基类指针调用派生类中与基类同名但被派生类重写后的成员函数时,调用的是派生类的成员函数。因为在派生类中重新定义了该成员函数覆盖了基类中的同名函数,基类指针指向的是派生类的对象,调用的是派生类的成员函数。如果要调用基类的同名函数,可以使用作用域解析运算符::来指定。
所以选择B
你可以自己试一下
#include <iostream>
using namespace std;
class Base {
public:
virtual void print() {
cout << "This is the Base class" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "This is the Derived class" << endl;
}
};
int main() {
Base* ptrBase = new Base;
Derived* ptrDerived = new Derived;
ptrBase->print(); // This is the Base class
ptrDerived->print(); // This is the Derived class
ptrBase = ptrDerived;
ptrBase->print(); // This is the Derived class
delete ptrBase;
delete ptrDerived;
return 0;
}
生成函数应用场景 :
多重集 rrr 组合计数 , 之前 只能计数特殊情况下的组合数 , 也就是选取数 rrr 小于多重集每一项的重复度 , 才有 组合数 N=C(k+r−1,r)N= C(k + r - 1, r)N=C(k+r−1,r) , 如果 rrr 大于重复度 , 就需要使用生成函数进行求解 ;
不定方程的解个数 , 之前只能求解 没有约束的情况 , 如果对变量有约束 , 如 x1x_1x1 只能在某个区间取值 , 这种情况下 , 就必须使用生成函数进行求解 ;
整数拆分 , 将一个正数拆分多若干整数之和 , 拆分方案个数 , 也可以通过生成函数进行计算 ;
回顾多重集排列组合 :