C++_纯虚函数and抽象类

纯虚函数 and 抽象类

  • 介绍
    • 纯虚函数
    • 抽象类
    • 纯抽象类(俗称:接口类)

介绍

本文主要介绍 纯虚函数 和 抽象类

纯虚函数

直接看源码吧,纯虚函数样式为:virtual 类型 函数名(参数表) = 0;

源码

#include
#include
using namespace std;
class A
{
public:
	//纯虚函数(仅做接口调用使用)
	virtual void Test(string) = 0;
};
class B :public A
{
public:
	void Test(string a){ cout << a << "Test" << endl; }
};
void main()
{
	//基类指针
	A *p = new B;
	p->Test("测试结果:"); 
	system("pause");
}

运行结果

测试结果:Test
请按任意键继续. . .

抽象类

1.至少拥有一个 纯虚函数的类 称为抽象类
2.抽象类 不能实例化为对象
(PS:基类对象无法实例化,只能用 基类指针来指向不同的子类)
3.抽象类子类 必须对 基类中全部纯虚函数 提供有效覆盖,否则子类也是抽象类

  • 抽象类的使用
    例如 有几台不同品牌电视机,每一种品牌都有专属的显示方法(传输方法),将品牌分成多个子类进行区分
    1.我们只需要 创建一个抽象类
    2.创建一个相同名字成员的 纯虚函数 作为显示(传输)的调用方法
    3.这样使用 基类指针去指向不同的子类 则会调用不同的显示(传输)方法

源码

#include
#include
using namespace std;
//抽象类(至少拥有一个 纯虚函数的类 称为抽象类)
class A
{
public:
	//纯虚函数(仅做接口调用使用)
	virtual void Test(string) = 0;
};
class B :public A
{
public:
	//测试函数
	void Test(string a){ cout << a << "B" << endl; }
};
class C :public A
{
public:
	//测试函数
	void Test(string a){ cout << a << "C" << endl; }
};
void main()
{
	//基类指针
	A *p = new B;
	p->Test("测试结果:"); 
	delete p;//销毁 new 空间

	//基类指针
    p = new C;//改变基类指针指向 子类C
	p->Test("测试结果:");
	delete p;//销毁 new 空间

	system("pause");
}

运行结果

测试结果:B
测试结果:C
请按任意键继续. . .

纯抽象类(俗称:接口类)

全部由 纯虚函数 构成的抽象类,称为 纯抽象类

#include
#include
using namespace std;
//纯抽象类(全部由 纯虚函数 构成的抽象类)
class A
{
public:
	//纯虚函数(仅做接口调用使用)
	virtual void Test(string) = 0;
	//纯虚函数(仅做接口调用使用)
	virtual void foo(string) = 0;
};
//子类 B
class B :public A
{
public:
	//测试函数
	void Test(string a){ cout << a << "B" << endl; }
	void foo(string str)
	{
		cout << str << endl;
	}
};
//子类 C
class C :public A
{
public:
	//测试函数
	void Test(string a){ cout << a << "C" << endl; }
	void foo(string str)
	{
		cout << str << endl;
	}
};
void main()
{
	//基类指针
	A *p = new B;
	p->Test("测试结果:"); 
	p->foo("B");
	delete p;//销毁 new 空间

	//基类指针
    p = new C;//改变基类指针指向 子类C
	p->Test("测试结果:");
	p->foo("C");
	delete p;//销毁 new 空间

	system("pause");
}

你可能感兴趣的:(C++学习参考,c++,笔记,学习)