纯虚类无法实例化:
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; }