C++笔记 : 虚函数,纯虚函数,抽象类

C++笔记:虚函数,纯虚函数,抽象类,多态性

1.虚函数:

被virtual 关键字修饰的成员函数。作用是实现成员函数的动态重载。
// --------- 示例 -------- //

#include <iostream>
using namespace std;

class A {
public:
	void print() {
		cout << "this is A" << endl;
	}
};
class B :public A {
public:
	void print() {
		cout << "this is B" << endl;
	}
};


int main() {
	// -------- part 1 -------- //
	cout << "This part is part 1" << endl;
	A a1;
	B b1;
	a1.print();
	b1.print();

	// -------- part 2 -------- // 
	cout << "This part is part 2" << endl;
	A a2;
	B b2;

	A* p1 = &a2;
	A* p2 = &b2;
	p1->print();
	p2->print();
	return 0;
}

运行结果:
在这里插入图片描述
在part2 中,将p2 只向了B对象,调用的却是A对象的print 方法,这不是我们预期的效果。
稍作改动,将基类中的print 函数改为虚函数。

class A {
public:
	virtual void print() {
		cout << "this is A" << endl;
	}
};

运行结果:
在这里插入图片描述

2.纯虚函数

特殊的虚函数, 在多数情况下,在基类中不能对虚函数给出有意义的实现,由派生类实现。
存虚函数也可称为抽象函数,一般来说只有函数名,参数,返回值类型,没有函数体。

基类中的实现示例

class A {
public:
	virtual void print() = 0;
};

3. 抽象类

包含纯虚函数的类称为抽象类, 由于包含了没有定义的纯虚函数,故不能定义抽象类对象。

4. 多态性

相同对象收到不同消息,或不同对象收到相同的消息产生不同的实现动作。C++支持两种多态性,编译时多态性与运行时多态性。

(举例:相同对象收到不同消息,应该就例如函数重载,相同的名字相同的函数,收到不同类型的参数,执行对应的函数体。
不同对象收到相同函数,例如通过抽象函数,让派生类可以接受同样的消息?)
(1)编译时多态性:重载函数和运算符重载实现
(2)运行时多态性:通过虚函数和继承实现

5. 不能声明为虚函数的函数

  1. 非成员函数
  2. 静态成员函数
  3. 内联成员函数
  4. 构造函数
  5. 友元函数

参考

[1] 度娘:关键字 + “定义”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值