C++多态赋值兼容&&多态

来源:互联网 发布:李玖哲 夏天 知乎 编辑:程序博客网 时间:2024/05/17 17:55

1、赋值兼容
赋值兼容就是把子类对象赋值给父类对象的过程,这样的目的是因为父类一般为接口类,对外都是看到父类,这样这个父类会派生出很多子类。那么别人要用到某个子类的时候就需要通过这个父类来访问子类,而此时就会使用A *a = &b(b为子类对象)。 比如这样的场景:子类B中拥有父类中的一样的函数func.这样即便在对象赋值给a之后,a中访问的func还是A的func。
class A
{
public:
void func(){cout<<”A”< < endl;}
};
class B:public A
{
public:
void func(){cout<<”B”<< endl;}
};

int main()
{
A *a;
B b;

a=&b;
a->func();//打印A
//b.func();

return 0;
}
那么怎么才能让b赋值给a之后能让a.func访问子类中的func呢,这里就需要讲A类中定义virtual函数,这样a.func就是表示的b.func了。
class A
{
public:
virtual void func(){cout<<”A”< < endl;}
};
class B:public A
{
public:
virtual void func(){cout<<”B”<< endl;}
};

int main()
{
A *a;
B b;

a=&b;
a->func();//打印B
//b.func();

return 0;
}

这样就把赋值兼容和虚函数联系起来了。主要这里赋值只能是指针和引用赋值,不能直接值赋值。值赋值a.func函数打印的A

二、多态
2.1什么叫多态
其实重载也叫多态,只是那叫静多态,也就是发生在编译阶段就确定了重载函数,而一般的多态指的是动态多态。也就是当生成对象时候才会知道调用那个函数的时候叫动态多态。其实通俗点,多态就是一个行为(func)在不同的对象和类之间实现的内容不一样。这行的方式就叫多态。
2.2多态几个关键概念
2.2.1、虚函数
在基类中定义了某个函数,然后再起子类中可能会定义相同的函数。如
class A
{
public:
virtual void func();
}
void A::fun{}
{
…..
}
class B:public A
{
public:
void func();
}
void B::func()
{
…….
}
这样定义B b时候,如果没有A中virtual void func,则B对象会覆盖类A中的func函数。那么如果要在B的对象中去调用A中的func怎么办?这样是不是就行不啦。所以需要在A中virtual func函数,这样通过B的对象赋值兼容给A的对象时候,通过A的对象就能访问。。。。。。不对这里理解还是有点问题。在需要学习在来补充理解。
2.2.2、纯虚函数
一旦一个类中包含有纯虚函数(就是在虚函数后面=0;的方式),这个类不能实例化对象,只能被继承。这样在子类中实现不同的虚函数接口。这样的类叫抽象基类。不是虚基类哈,虚基类是值得包含了共有部分的类,然后让其他类virtual方式来继承的类。这样多个子类共享一份数据。