继承,从基方法调用重载方法
inheritance, calling overloaded method from base method
我有两个类:
class A {
int get();
string str();
}
string A::str() {
return string_with( get() );
}
class B : public A{
int get();
}
如果我这样做:
A a
B b
b.str()
b
将调用A::str()
方法(好),而将使用A::get()
方法(坏)。我希望,当我调用b.str()
时,B::get()
被str
使用。
如何让它工作?
让它成为虚拟的。这正是virtual的作用。
写virtual int get();
在A的定义中。并且,为了使代码更容易理解,在B中也这样做。
顺便说一下,我假设你的意思是写class B : public A
。
在面向对象编程这个神奇的词中,有两种方法调用方法:静态和动态调度。
在静态调度中,执行a.do_it()
之类的操作时调用的代码是静态确定的,也就是说,它是根据变量a
的类型确定的。
在动态调度中,调用的代码是动态确定的,也就是说,它是根据a
引用的对象的类型确定的。
virtual
放在方法声明中。
可以使用虚拟关键字。然后使用指针
class A
{
public:
virtual int get() { cout << "A::get()" << endl; return 0;}
string str()
{
cout << "A::str()" << endl;
get();
return "";
}
};
class B : public A
{
public:
virtual int get() { cout << "B::get()" << endl; return 0; }
};
B* B = new B;b -> str ();
输出:答::str ()B: get ()
相关文章:
- 如何强制从重写方法调用重写的方法基方法?
- C++:使用方法调用析构函数的顺序是什么?
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 使用 object 中的方法调用带有 std::bind 和 std::function.target 的 C 样式函数
- 指向类方法调用的指针
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 是否有可以处理方法调用依赖关系的设计模式?
- 如何缩短C++中的方法调用?
- 从部分专用模板方法调用模板非静态方法
- 有没有办法禁止派生类中的基类方法调用?
- 为什么这C++只在编译器上编码一个不明确的方法调用Microsoft?
- 从父方法调用子方法
- 如何将子方法调用到父方法
- 虚拟函数在哪里使用 vpointer to vtable 来解析方法调用,非虚拟方法存储在哪里以及如何解析它们?
- 从静态方法调用静态函数指针
- 从同一类中的另一个方法调用方法时出错
- 方法调用意外地像 l 值一样起作用
- 无法从派生的一个方法调用基类方法
- 从类方法调用命名空间中名为 Same 的函数时,重载解析失败
- C 多线程JAVA JNI方法调用