您的位置:首页 > 编程语言 > C语言/C++

c++ primer学习之-----C++ 中的多态性

2011-02-17 18:00 183 查看
引用和指针的静态类型与动态类型可以不同,这是 C++ 用以支持多态性的基石。

通过基类引用或指针调用基类中定义的函数时,我们并不知道执行函数的对象的确切类型,执行函数的对象可能是基类类型的,也可能是派生类型的。

如果调用非虚函数,则无论实际对象是什么类型,都执行基类类型所定义的函数。如果调用虚函数,则直到运行时才能确定调用哪个函数,运

行的虚函数是引用所绑定的或指针所指向的对象所属类型定义的版本。

在编译时确定非 virtual 调用

覆盖虚函数机制

在某些情况下,希望覆盖虚函数机制并强制函数调用使用虚函数的特定版本,此时需要使用作用域操作符:

Item_base * baseP = &derived;

double d = baseP->Item_base::net_price(42); //这里强制将net_price调用确定为Item_base中定义的版本,该调用将在编译时确定。

只有成员函数中的代码才应该使用作用域操作符覆盖虚函数机制。

为什么会希望覆盖虚函数机制?最常见的理由是为了派生类虚函数调用基类中的版本。

虚函数与默认实参

如果有用在给定调用中的默认实参值,该值将在编译时确定。

如果一个调用省略了具有默认值的实参,则所用的值由调用该函数的类型定义,与对象的动态类型无关。通过基类的引用或指针调用虚函数时,默认实参为在基类虚函数声明中指定的值,如果通过派生类的指针或引用调用虚函数,则默认实参是在派生类的版本中声明的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: