[设计模式] 抽象类的实例化

纯虚类无法实例化:

class ABC {
public:
	using Ptr = std::unique_ptr<ABC>;

	ABC() = default;
	~ABC() = default;

	virtual void func1() = 0;
	virtual void func2() = 0;
	virtual void func3() = 0;
	virtual void func4() = 0;


	static Ptr Create() {
		return new ABC();
	}
};

上述代码无法编译通过,提示 “不允许使用抽象类类型的对象”。

如果一个类包含至少一个纯虚函数,那么这些类就是抽象类,那么是无法实例化的。

正是因为有上面那一条限制,才会有很多设计模式用来解决一些设计上的问题。

在纯虚类里实例化纯虚类的子类:

ABC.h

#pragma once

#include <memory>

class ABC {
public:
	using Ptr = std::unique_ptr<ABC>;

	ABC() = default;
	~ABC() = default;

	virtual void func1() = 0;
	virtual void func2() = 0;
	virtual void func3() = 0;
	virtual void func4() = 0;

	static Ptr Create();
};

ABC.cpp

#include "ABC.h"
#include "CCT.h"

ABC::Ptr ABC::Create() {
	Ptr tmp = std::unique_ptr<CCT>(new CCT());
	return tmp;
}

CCT.h

#pragma once

#include "ABC.h"

class CCT :public ABC {
public:
	CCT() = default;
	~CCT() = default;

	void func1();
	void func2();
	void func3();
	void func4();
};

CCT.cpp

#include "CCT.h"

void CCT::func1() { return; }
void CCT::func2() { return; }
void CCT::func3() { return; }
void CCT::func4() { return; }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值