klimi

导航

c++多态 极简单

c++多态就是动态绑定
动态绑定就是在运行时才能知道我要执行什么操作

静态绑定

void fun(){
cout<<"hello world"<<endl;
}

fun(); //静态绑定 编译的时候就知道要执行fun()而且运行时候也不会有所改变

动态绑定
动态绑定需要借助派生类 和 基类 和虚函数 实现

class base{
public:
virtual void fun(){cout<<"hello base"<<endl;}
}

class son:public base{
public:
void fun(){cout<<"hello son"<<endl;}
}

base b;
son s;

base* p=&b; //此处有多态 多态就是就是基类的指针可以指向派生类(基类类型可以引用派生类如base& b_=b;) 即&s 所以p->fun()这一句 我们在不知道p指向的究竟是具体哪个类时 是无法得知应该执行派生类的fun()还是基类的fun()
p->fun();//此处执行基类的fun()
p=&s;
p->fun();//此处执行派生类的fun()

多态需要借助虚函数 虚函数也是可以被实现的 不能被实现的是纯虚函数 纯虚函数的类叫抽象类是不能实例化的 只有派生的类实现了这个纯虚函数派生类才能实例化 否则派生类也是个抽象类 纯虚函数的格式是 void fun()=0;

关于基类的指针 引用 普通量 和 派生类的关系
son s;
base* p=&s; //p->fun()是子类的fun()
base& b=s; //b.fun()是子类的fun()
base b=s; //b.fun()是基类的fun() 因为这一步实际是调用了base的拷贝构造函数 拷贝构造函数接收s并将其切割转换成base类型 只保留bse类中的成员 所以返回的是base类型的b

posted on 2020-11-08 14:35  ShawnMckeown  阅读(38)  评论(0编辑  收藏  举报