C++随笔 之 C++多态性分析
原文出处
http://community.csdn.net/Expert/topic/5240/5240218.xml?temp=.6121942
C++多态性是基于抽象类来实现的,什么叫抽象类?
抽象类就是不能被实例化的类,主要是因为类中包含一个纯虚函数
例如:
virtual void draw() = 0;
抽象类不能实例化,但是其派生类可以
派生类重写draw()函数之后就可以实例化对象了,那么n个派生类可以有n种不同的draw()函数
举一个例子:
例如: 人[ 男人 女人]
人可以[劳动]吧,那么我们就把[劳动]这个函数定义为纯虚函数,
那么在定义[男人]的时候,我们就可以重写[劳动]函数,让他进行耕地操作
在定义[女人]的时候,我们就可以重写[劳动]函数,让她进行织布操作
那么在人劳动的时候,具体到男人,那就是耕地,具体到女人,那就是织布
以上就是一个最简单的解释
那么我们如果出现这个问题,人还分为老年人,中年人,小孩子
那么我们在继承人这个类的时候,把老年人,中年人,小孩子,不能重写它的劳动函数,也就是劳动函数还是一个纯虚函数,下面我给出一个图
[比喻不是很确却,抱歉]
下面我给例子:
Code Example
class Person
{
virtual void Do() = 0;
};
class OldPerson:public Persion
{
};
class OldMan:public OldPerson
{
void Do()
{
抽烟,聊天();
}
};
class OldWoman:public OldPerson
{
void Do()
{
洗衣服();
}
}
class MidPerson:public Person
{
};
class MidMan:public MidPerson
{
void Do()
{
耕地();
}
};
class MidWoman:public MidPerson
{
void Do()
{
织布();
}
};
......下面小孩子的我就不写了,相信聪明的你一下子就知道怎么写了
void 劳动(const Person &person)
{
person.Do();
}
void main()
{
MidWoman midwomen;
MidMan midman;
劳动(midwoman);
劳动(midman);
}
http://community.csdn.net/Expert/topic/5240/5240218.xml?temp=.6121942
C++多态性是基于抽象类来实现的,什么叫抽象类?
抽象类就是不能被实例化的类,主要是因为类中包含一个纯虚函数
例如:
virtual void draw() = 0;
抽象类不能实例化,但是其派生类可以
派生类重写draw()函数之后就可以实例化对象了,那么n个派生类可以有n种不同的draw()函数
举一个例子:
例如: 人[ 男人 女人]
人可以[劳动]吧,那么我们就把[劳动]这个函数定义为纯虚函数,
那么在定义[男人]的时候,我们就可以重写[劳动]函数,让他进行耕地操作
在定义[女人]的时候,我们就可以重写[劳动]函数,让她进行织布操作
那么在人劳动的时候,具体到男人,那就是耕地,具体到女人,那就是织布
以上就是一个最简单的解释
那么我们如果出现这个问题,人还分为老年人,中年人,小孩子
那么我们在继承人这个类的时候,把老年人,中年人,小孩子,不能重写它的劳动函数,也就是劳动函数还是一个纯虚函数,下面我给出一个图
[比喻不是很确却,抱歉]
下面我给例子:
Code Example
class Person
{
virtual void Do() = 0;
};
class OldPerson:public Persion
{
};
class OldMan:public OldPerson
{
void Do()
{
抽烟,聊天();
}
};
class OldWoman:public OldPerson
{
void Do()
{
洗衣服();
}
}
class MidPerson:public Person
{
};
class MidMan:public MidPerson
{
void Do()
{
耕地();
}
};
class MidWoman:public MidPerson
{
void Do()
{
织布();
}
};
......下面小孩子的我就不写了,相信聪明的你一下子就知道怎么写了
void 劳动(const Person &person)
{
person.Do();
}
void main()
{
MidWoman midwomen;
MidMan midman;
劳动(midwoman);
劳动(midman);
}