C++虚函数实现多态,常见问题总结

C++ 虚函数实现多态总结

1.使用virtual时,只在成员函数的声明中添加virtual,在成员函数的实现中不要加virtual,示例如下:

Father.h

class Father{
public:
	virtual int val();
}

Father.cpp

int Father::val(){
	//...
}

2.如果在子类中重写虚函数,建议加上virtual,和override,方便可读和排错!
注意:重写虚函数时,函数原型必须保持一致,如基类为int类型,那么子类重写时也必须为int类型!
Father.h

class Father{
public:
	virtual int val();
}

Son.h

class Son:public Father{
public:
	virtual int val() override;
}

Son.cpp

int Son::val(){
	//...
}

3.final,用来修饰类,让该类不能被继承,有点像叶问1、叶问2、叶问3、叶问4,到4就终结了,没有下一部。

class yewen1{}
class yewen2:public yewen1{}
class yewen3:public yewen2{}
class yewen4 final: public yewen3{}

4.为了防止内存泄漏,最好在基类析构函数上添加virtual,使基类函数为虚构函数,目的在于,当使用delete释放类指针时,会实现动态的析构:

  1. 如果基类指针指向的是基类对象,那么调用基类的析构函数;
  2. 如果基类指针指向的是子类对象,那么先调用子类的析构函数,再调用父类的析构函数。

Father.h

class Father{
public:
	virtual ~Father();
}

Son.h

class Son:public Father{
public:
	 ~Son();
}

5.如果有的类不需要创建它的对象,这个类中定义的某些成员函数只提供形式上的接口,让子类来做具体实现,那么可以使用纯虚函数。
用法:使用virtual 和 = 0

Father.h

class Father{
public:
	virtual int val() = 0;//不用做具体实现
}

Son.h

class Son:public Father{
public:
	 virtual int val() override;
}

Son.cpp

int Son::val(){
	//...
}

你可能感兴趣的:(C++)