求大神帮我看下,这个问题我困扰了半个月

头文件1 dynbase.h

#ifndef   _DYNBASE_H_
#define   _DYNBASE_H_

#include <map>
#include <string>
using namespace std;

typedef void* (*CREATE_FUNC)();


class DynCreateFactory {
public:
	/* ----- 从map容器中得到响应的形状 ----- */
	static void* CreateShape(const string& name);
	/* ----- 运行时动态创建各类形放入map容器 ----- */
	static void registes(const string& name, CREATE_FUNC func);
private:
	static map<string, CREATE_FUNC> cls_;
};

/* ----- 利用构造函数自动调用DynCreateFactory中的registes函数 ----- */
class RegistObj {
public:
	RegistObj(const string& name, CREATE_FUNC func);
};

/* ----- 利用宏定义在main前创建工厂 ----- */
#define CREATE_OBJ(class_name) \
class class_name##Registe { \
public: \
	static void* Instance() { \
		return new class_name; \
    } \
private: \
	static RegistObj reg_; \
}; \
RegistObj  class_name##Registe::reg_(#class_name, class_name##Registe::Instance)

#endif // _DYNBASE_H_




头文件2 shape.h

#ifndef   _SHAPE_H_
#define   _SHAPE_H_

#include "dynbase.h"
#include <iostream>
using namespace std;

class Shape {
public:
	virtual void Draw() = 0;
	virtual ~Shape() {}
};

class Circle : public Shape {
public:
	virtual void Draw();
	~Circle();
};

class Rectangle : public Shape {
public:
	virtual void Draw();
	~Rectangle();
};

class Square : public Shape {
public:
	virtual void Draw();
	~Square();
};

#endif // _SHAPE_H_ 






源文件1 dynbase.cpp

#include "dynbase.h"

map<string, CREATE_FUNC> DynCreateFactory::cls_;

void* DynCreateFactory::CreateShape(const string& name) {
	map<string, CREATE_FUNC>::iterator it;

	it = cls_.find(name);
	if (it == cls_.end())
		return 0;
	else
		return it->second();
}

void DynCreateFactory::registes(const string& name, CREATE_FUNC func) {
	cls_[name] = func;
}

RegistObj::RegistObj(const string& name, CREATE_FUNC func) {
	DynCreateFactory::registes(name, func);
}





源文件2 shape.cpp

#include "shape.h"

void Circle::Draw() {
	cout << "Circle::Draw()" << endl;
}
Circle::~Circle() {
	cout << "~Circle()" << endl;
}

void Rectangle::Draw() {
	cout << "Rectangle::Draw()" << endl;
}

Rectangle::~Rectangle() {
	cout << "~Rectangle()" <<endl;
}

void Square::Draw() {
	cout << "Square::Draw()" <<endl;
}

Square::~Square() {
	cout << "~Square()" << endl;
}

CREATE_OBJ(Circle);
//CREATE_OBJ(Rectangle);
//CREATE_OBJ(Square);





源文件3 main.cpp

#include "shape.h"

int main(void) {
	Shape* sp = (Shape*)DynCreateFactory::CreateShape("Circle");
	sp->Draw();
	delete sp;

	return 0;
}

#C++工程师#
全部评论

相关推荐

搜索部&nbsp;首先说下timeline8.18,投递8.19,约一面8.21,晚上一面call约二面8.22,上午二面下午oc周末等待(8.23,8.24)8.25,offer一年前,我还是懵懵懂懂,高考完的暑假,只会提前学学高数,未来的画像是什么?我或许无法预测。开学后,自学Python,接单,无数个客户的ddl,偷偷摸摸一个人找自习的地方,这一步步竟然为后来的我,搭建工程能力的基础。大一上,我也要感谢我的第一位老板,让我接触到了实习,师兄带着我一步步入门,看他们写的飞书文档。大一下,导师带我参与企业项目,这让我渐渐发现,应该去实践,增长见识,而非局限当下,盯着自己的小新pro。不久后,第一波投递开始,结果当然是约面极少。盯着简历上的文字和ssob,我开始思考,确实很多可以去提升。带着些许不甘心,继续沉淀,慢慢的约面也越来越多,有的时候两天7场,准备完就接着下一个日程。这一次,也许是刚好到位吧,比较match,面试答的流利,关关难关关过,成为度孝子展望未来,依然是重重挑战,果然只有收到offer的那一刻是开心的。愿在百度星海拆解的每一段代码,都能成为丈量宇宙的诗行;此志终赴星河,而今迈步重铸天阶。屏幕前的你们,在无数个向星海奔赴的日夜,一定一定,会在未来化作群星回响的征程——请永远相信此刻埋首耕耘的自己!!!
一天三顿半:???百度提前批发 offer了?不是统一和正式批排序完再发吗我靠
百度求职进展汇总
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务