多态

↘锁芯ラ 提交于 2020-03-02 18:21:23

前面讲了父类指针指向子类对象时,可以访问子类的成员变量(从父类继承过来的成员变量),但是成员函数(从父类继承过来的成员函数)时,依旧访问的是父类的成员函数。

(我们说这是因为,成员函数并没有存如到对象的内存中,而是在全局数据区)。

为了解决这个问题,c++增加了虚函数。注意是虚函数不是虚继承

虚继承是在出现菱形继承时,在继承方式前面加virtual,保证父类成员只出现一次
在初始化时调用间接基类进行初始化。

虚函数是为了让父类指针指向子类对象时,可以使用子类的成员函数。

使用虚函数只需要在函数声明前面增加 virtual 关键字。

有了虚函数,基类指针指向基类对象时就使用基类的成员(包括成员函数和成员变量),指向派生类对象时就使用派生类的成员。它有多种形态,或者说有多种表现方式,我们将这种现象称为多态(Polymorphism)。

多态的目的

过基类指针对所有派生类(包括直接派生和间接派生)的成员变量和成员函数进行“全方位”的访问,尤其是成员函数。如果没有多态,我们只能访问成员变量。

using namespace std;
class A{
public:
	A() :m_a(10), m_a1(11){}
	virtual void func()
	{
		cout << " this is A" << endl;
	}
	int m_a;
private:
	int m_a1;
};
class B:public A{
public:
	B() :m_b(20), m_b1(21){}
	virtual void func()
	{
		cout << "this is B" << endl;
	}
	int m_b;
private:
	int m_b1;
};
class C {
public:
	C() :m_c(30), m_c1(31){}
	virtual void func()
	{
		cout << "this is C" << endl;
	}
	int m_c;
private:
	int m_c1;
};
class D :public C,public B{
public:
	D() :m_d(40), m_d1(41){}
	virtual void func()
	{
		cout << "this is D " << endl;
	}
	int m_d;
private:
	int m_d1;
};
int main()
{
	A*pa = new A;
	B*pb = new B;
	C*pc = new C;
	D*pd = new D;
	pa = pd;
	pa->func();
	system("pause");
	return 0;
	指针指向哪个对象调用哪个对象的func函数。
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!