多态
1。多态中的virtual函数中在子类可不可以有不同的参数列表,比如说基类不带参数,子类重新实现的时候加了参数
2.子类函数B调用基类函数A,基类函数A返回数据成员,那这个数据成员的值是基类的还是子类的
3.在类之外,假设基类名字为A 基类中一个函数名为B 为什么不能用A::B方式调用//这个可能和多态无关
4.基类的一个virtual函数为A,基类提供实现 ,子类重新实现这个函数,这两个函数都是操作数据成员B 并将结果返回
问题是 想要返回基类实现的结果 但是用的子类数据成员B的值 比如说基类中B的值为10 ,子类中B的值为20,基类A函数
返回值B+1, 而子类A函数返回B+5, 那如何用基类的函数 但是B的值为20 就是返回21 而不是25
谢谢了 觉得问题哪里不清楚的 麻烦说下
[解决办法]
1. 不可以。因为那样函数的签名就不同了,将会是一个完全不同的函数。virutal函数的目的就是为了定义一个接口函数,因此函数的声明必须和基类一致。
2. 严格地说:是基类的,也是子类的。基类所有的成员变量都会被派生类继承下来,即使是基类中的private成员变量,只不过在这种情况下,派生类不能访问那个成员变量吧了。
3. 通常情况下,只有静态成员函数才能通过A::B这样的方式调用,非静态函数都是和类的实例(即对象)相关的,因此调用的时候,必须现有对象,然后才能调用。比如,如果B是一个非静态成员函数,那么只能:
A a;
a.B();
或者:
A* pa = new A;
pa->B();
这样的方式调用。
如果B是一个静态成员函数,由于静态成员函数是类级别的,即一个类所有的实例都共享这个成员函数,因此可以不用定义该类的实例(对象),就可以直接通过A::B()这样的方式调用。
4. 是不可以做到的。因为不可能做到使用动态类型的成员函数,同时又使用静态类型的成员变量。这两者必须保持一致,及要么成员函数和成员变量都是动态类型,要么都是静态类型的。
[解决办法]