虚函数

/**

* 1、一旦某个函数被声明成虚函数,则在所有派生类中它都是虚函数。

* 2、派生类的函数如果覆盖了某个继承而来的虚函数,则它的形参类型、返回类型必须与覆盖的基类函数完全一致,

*       特别的是,如果当返回类型是类本身的指针或引用时,覆盖效果依然成立。

* 3、如果虚函数使用了默认实参,则该实参值由本次调用的静态类型决定。

* 4、使用作用域运算符,回避虚函数的机制,强制调用虚函数的某个版本,形如“devied->Base::get();”。

* 5、编译器是根据指针或引用确定动态类型,非指针或非引用类型的普通对象都是确定的静态类型,没有多态效果。

* 6、派生类的成员或友元只能通过派生类对象来访问基类受保护的成员。

*/

#include <iostream>

class A {
 public:
  virtual A* get(int a = 1) {
    std::cout << "A.get, a:" << a << std::endl;
    return this;
  }
  
};

class B : public A {
 public:
  B* get(int a = 2) override {
    std::cout << "B.get, a:" << a << std::endl;
    return this;
  }
};

class C : public B {
  public:
  C* get(int a = 3) override {
    std::cout << "C.get, a:" << a << std::endl;
    return this;
  }
};

int main() {
  A* a = new C;
  a->get();
  getchar();
  delete a;
  // TODO
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值