C++之所以叼,厉害,其中一个原因是他可以轻松的实现多态功能
提到多态,脑海里飘过老师上课时的一句话:
“简单的来说,多态就是通过父类指针和引用可以调用子类的函数,实现多态必须有这几个条件
1》父类的此函数(发生多态的)必须有 virtual 关键字修饰
2》子类必须继承父类
3》子类必须重写父类的发生多态的函数”
举个栗子:
class A
{
public:
virtual void func() //有关键字irtual修饰
{
cout<<"A::func()"<<endl;
}
};
class B : public A
{
public:
void func() //virtual
{
cout<<"B::func()"endl;
}
};
int main01(void)
{
A *a = new B();
a->foo(); //通过指针调用
delete a;
return 0;
}
out : B::foo() function
int main02(void)
{
B b;
A &a = b;
a.foo(); //通过引用调用
return 0;
}
out : B::foo() function
这个就发生多态了,利用父类的指针调用子类的函数,是不是很厉害,就是前人写的代码可以调用后人的代码
觉得这个还好的话看看下边这个栗子,是我第一次接触工作的时候,在公司看到技术大牛写的 ,就模拟一下调用关系
class Father
{
protected:
virtual void func()
{
cout<<"I am Father class"<<endl;
}
public:
void TestFunc()
{
func();
}
};
class Child : public Father
{
protected:
virtual void func();
{
cout<<"I am Child class"<<endl;
}
public:
int start()
{
TestFunc(); //注意,这是调用的父类的函数
return 0;
}
};
int main(void)
{
Child ch;
ch.start();
return 0;
}
out : I am Child class
最后聊聊纯虚函数:纯虚函数是在基类中定义的虚函数而不去实现但是在子类中必须实现的函数叫纯虚函数,有纯虚函数的类叫
做抽象类,没什么高深的,大家不要被唬住
举个栗子:
class Father
{
public:
virtual void fun() = 0;
};
class Child : public Father
{
//如果要实例化一个子类的对象,那么,子类必须实现父类的虚函数,
}
抽象类不能直接实例化对象,必须通过子类来实例化对象
记录学习C++的路
转载于:https://my.oschina.net/lcg521521/blog/666469