用凡科做网站有自己的域名,互联网络推广,做网站外包大学生,佛山免费网站建设实现: 1) cImage:抽象类; cImageReal:派生类, 不可直接实例化; cImageProxy:派生代理类, 可直接实例化用来代理cImageReal; NOTICE:派生代理类用来简化对特定派生类的使用. 使用: 实例化代理类, 然后使用. 1) 设计框架 /*image.hpp*/
#pragma once
#…实现: 1) cImage:抽象类; cImageReal:派生类, 不可直接实例化; cImageProxy:派生代理类, 可直接实例化用来代理cImageReal; NOTICE:派生代理类用来简化对特定派生类的使用. 使用: 实例化代理类, 然后使用. 1) 设计框架 /*image.hpp*/
#pragma once
#ifndef __IMAGE__HPP
#define __IMAGE__HPP
#include stringnamespace __proxy{class cImage{
public:virtual ~cImage();
protected: cImage();
public:virtual void display() 0;
};}
#include image_real_proxy.hpp#endif/*image_real_proxy.hpp*/
#pragma once
#ifndef __IMAGE_REAL_PROXY_HPP
#define __IMAGE_REAL_PROXY_HPP
#include image.hpp
#include stringnamespace __proxy{class cImageReal:virtual public cImage{
public:cImageReal(std::string const filename);
public:void display() override;
private:void loadFromDisk(std::string const filename);std::string _M_filename;
};}namespace __proxy{class cImageProxy:virtual public cImage{
public:cImageProxy(std::string const filename);
public:void display() override;
private:cImageReal *_M_image nullptr;std::string _M_filename;
};}
#endif2) 实现框架 /*image.cpp*/
#include image.hpp
#include stdio.hnamespace __proxy{cImage::~cImage()
{}
cImage::cImage()
{}}/*image_real_proxy.cpp*/
#include image_real_proxy.hpp
#include stdio.hnamespace __proxy{cImageReal::cImageReal(std::string const filename)
{_M_filename filename;loadFromDisk(_M_filename);
}
void cImageReal::display()
{printf(Displaying %s\n, _M_filename.c_str() );
}
void cImageReal::loadFromDisk(std::string const filename)
{printf(Loading %s ... ok!\n, _M_filename.c_str() );
}}namespace __proxy{cImageProxy::cImageProxy(std::string const filename)
{_M_filename filename;
}
void cImageProxy::display()
{if( nullptr _M_image ){_M_image new cImageReal(_M_filename);}if( _M_image ! nullptr){_M_image-display();}
}} 3) 用户使用
#include image.hpp
#include cstdlib
#include cstdioint main(int argc, char *argv[])
{if( argc ! (1 1) ){fprintf(stderr, Usage:%s display-times\n, argv[0]);return EXIT_FAILURE;}long long DISPLAY_TIMES atoll(argv[1]);__proxy::cImage *image new __proxy::cImageProxy(test_18mb.jpg);if( image ! NULL){printf(---------------------------------\n);image-display();printf(---------------------------------\n);for(long long idisp 1; idisp DISPLAY_TIMES; idisp ){image-display();}delete image, image NULL;}return EXIT_SUCCESS;
}4) 编译与运行