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

介绍

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

纯虚函数

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

源码

#include<iostream>
#include<string>
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<iostream>
#include<string>
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<iostream>
#include<string>
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");
}

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 02:14:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 02:14:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 02:14:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 02:14:03       20 阅读

热门阅读

  1. pyDAL一个python的ORM(8) pyDAL的commit()方法

    2024-01-10 02:14:03       34 阅读
  2. 力扣232. 用栈实现队列

    2024-01-10 02:14:03       33 阅读
  3. K8S-环境部署

    2024-01-10 02:14:03       33 阅读
  4. OBD汽车

    OBD汽车

    2024-01-10 02:14:03      37 阅读
  5. Linux 专栏目录

    2024-01-10 02:14:03       48 阅读
  6. linux 安装sipp

    2024-01-10 02:14:03       45 阅读
  7. 18.Linux Shell中的mktemp命令使用

    2024-01-10 02:14:03       33 阅读
  8. hutool将字符串Json转成数组

    2024-01-10 02:14:03       37 阅读