NDK13_C++基础:虚函数

NDK开发汇总

一 虚函数

增加程序的扩展性

class Parent {
public:
	 void test() {
		cout << "parent" << endl;
	}
};

class Child :public Parent {
public:
	void test() {
		cout << "child" << endl;
	}
};

Parent *c = new Child();
// 编译期间 确定c 为 parent 调用parent的test方法
c->test();

//修改Parent为virtual 虚函数 动态链接,告诉编译器不要静态链接到该函数
virtual void test() {
		cout << "parent" << endl;
}
//动态多态 调用Child的test方法
c->test();

构造函数任何时候都不可以声明为虚函数

析构函数一般都是虚函数,释放先执行子类再执行父类

二 虚函数引发的内存泄漏:

则在virtualFun函数中通过父类指针操作子类对象的成员函数的时候是没有问题的,可是在销毁对象内存的时候则只是执行了父类的析构函数,子类的析构函数却没有执行,这会导致内存泄漏

void zipFun() {

	//用父类的指针来出事话一个子类的对象
	Plane *jet = new Copter();
	//调用了子类中的虚函数
	jet->land();

	//回收
	delete jet;
	jet = nullptr;   //这种情况存在内存泄漏的可能
}

调用后打印:没有走子类Copter的析构函数

Plane 无参构造函数00905A08湾流1991
Copter  无参构造函数湾流1991
Copter land
Plane 析构函数00905A08湾流1991
		

解决方法 将Plane 和Copter 的析构函数都声明为虚函数(.h声明中加上virtual关键字)

三 纯虚函数

//纯虚函数
virtual void test() = 0;
  • 当一个类具有一个纯虚函数,这个类就是抽象类
  • 抽象类不能实例化对象
  • 子类继承抽象类,必须要实现纯虚函数,如果没有,子类也是抽象类
  • 一个类中只有纯虚函数,那么它是一个接口
  • 抽象类的作用:为了继承约束,根本不知道未来的实现
class Parent {
public:
    //纯虚函数 继承自这个类需要实现 抽象类型
	virtual void test() = 0;
};

class Child :public Parent {
public:
	void test(){}
};

猜你喜欢

转载自blog.csdn.net/baopengjian/article/details/105979710
今日推荐