update:6/6,面向对象程序设计
虚函数
在一个基类中声明一个函数为virtual类型,即virtual void Run();那么这个函数就是虚函数,
作用:实现多态,父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。
我这里是
class vehicle{
public:
int MaxSpeed;
int Weight;
virtual void Run(){
cout<<"NMSL1\n";
};
void Stop(){};
};
class bicycle:public vehicle{
public:
int Height;
void Run(){
cout<<"NMSL2\n";
};
};
class motorcar:public vehicle{
public:
int SeatNum;
void Run(){
cout<<"NMSL3\n";
};
};
然后通过父类指针指向子类实例
vehicle vc,*VC;
bicycle bc;
motorcar mc1;
VC=&vc;
VC->Run();
VC=&bc;
VC->Run();
VC=&mc1;
VC->Run();
结果是
NMSL1
NMSL2
NMSL3
如果之前我不声明Run为虚函数,那么结果是:
NMSL1
NMSL1
NMSL1
虚函数最关键的特点是“动态联编”,它可以在运行时判断指针指向的对象,并自动调用相应的函数。
虚继承
上面说到,虚函数是在基类中声明,而虚继承不一样,虚继承是在一代子类中声明继承方式为虚继承。
class bicycle:virtual public vehicle{
public:
int Height;
void Run(){
cout<<"NMSL2\n";
};
};
class motorcar:virtual public vehicle{
public:
int SeatNum;
void Run(){
cout<<"NMSL3\n";
};
};
虚继承的作用是:
虚继承 是面向对象编程中的一种技术,是指一个指定的基类,在继承体系结构中,将其成员数据实例共享给也从这个基类型直接或间接派生的其它类。
虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。
类D继承自类B1、B2,而类B1、B2都继承自类A,加入不说明B1\B2继承A的方式,会导致D调用A的函数时出现二义性,不知道是B1继承的A还是B2继承的A,这时候需要引入虚继承。
本文深入探讨了C++中的虚函数和虚继承概念,解析了如何通过虚函数实现多态,以及虚继承在解决多重继承二义性问题中的应用。通过具体代码示例,展示了虚函数和虚继承在类层次结构中的工作原理。
626

被折叠的 条评论
为什么被折叠?



