1绑定是把函数名和函数体关联起来的过程,
2静态多态性又叫编译时多态性,即系统在编译时就确定了通过函数名所调用的函数体(早期联边),它通过函数重载实现
3动态多态性又叫运行时多态性,编译时无法确定绑定对象,必须等到程序运行时才能关联到需要执行的函数体(滞后联边),虚函数和继承
4虚函数用virtual修饰的成员函数,不能是普通函数,在c++中如果在基类中定义了虚函数,那么在其派生类中的同名函数(2者函数原型完全相同)必定也是虚函数。
4虚函数的优点———通过使用指向基类对象的指针或者引用来调用该虚函数可实现动态调用
5动态绑定的2个条件:1是使用虚函数2是使用指向基类的指针或者引用调用该虚函数
#ifndef _SCLASS4_1_CSHAPE_H_
#define _SCLASS4_1_CSHAPE_H_
#include <iostream>
using namespace std;
class CShape
{
public:
CShape(double x,double y,double z);
~CShape(){};
virtual void Show();//动态绑定需要虚函数
protected:
double m_x;
double m_y;
double m_z;
};
class CCircle:virtual public CShape
{
public:
CCircle(double x,double y,double z,double radius);
~CCircle(){};
void Show();
protected:
double m_radius;
};
#endif
#include "sclass4_1_CShape.h"
CShape::CShape(double x,double y,double z):m_x(x),m_y(y),m_z(z)
{;}
void CShape::Show()
{
cout<<"x="<<m_x<<" y="<<m_y<<" z="<<m_z<<endl;
}
void CCircle::Show()
{
cout<<"x="<<m_x<<" y="<<m_y<<" z="<<m_z<<" radius="<<m_radius<<endl;
}
CCircle::CCircle(double x,double y,double z,double radius):CShape(x,y,z),m_radius(radius)
{
;
}
#include "sclass4_1_CShape.h"
void main()
{
CShape *p;
CShape b(1,2,3);
CCircle c(5,54,6,6);
p=&b;
p->Show();
p=&c;
p->Show();//有virtual实现了动态绑定正确调用否则的话Show只能继承来自基类中的Show()无法正确运行
cin.get();
}
基类的引用
在.H文件中加上
void Reference(const CShape &abc)
{
abc.Show();
}
main函数改为
void main()
{
CShape a(12,3,4);
CCircle b(5,6,7,7);
Reference(a);
//Reference(b);
cin.get();
}