Dec 6, 2014 at 7:32pm UTC
I dont follow the following code in the mydocument class
MyDocument(char *fn): Document(fn){} Whats going on with this code is it calling Document class constructor or something?
what about the empty brackets?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
#include <iostream.h>
/* Abstract base class declared by framework */
class Document
{
public :
Document(char *fn)
{
strcpy(name, fn);
}
virtual void Open() = 0;
virtual void Close() = 0;
char *GetName()
{
return name;
}
private :
char name[20];
};
/* Concrete derived class defined by client */
class MyDocument: public Document
{
public :
MyDocument(char *fn): Document(fn){}
void Open()
{
cout << " MyDocument: Open()" << endl;
}
void Close()
{
cout << " MyDocument: Close()" << endl;
}
};
/* Framework declaration */
class Application
{
public :
Application(): _index(0)
{
cout << "Application: ctor" << endl;
}
/* The client will call this "entry point" of the framework */
NewDocument(char *name)
{
cout << "Application: NewDocument()" << endl;
/* Framework calls the "hole" reserved for client customization */
_docs[_index] = CreateDocument(name);
_docs[_index++]->Open();
}
OpenDocument(){}
void ReportDocs();
/* Framework declares a "hole" for the client to customize */
virtual Document *CreateDocument(char *) = 0;
private :
int _index;
/* Framework uses Document's base class */
Document *_docs[10];
};
void Application::ReportDocs()
{
cout << "Application: ReportDocs()" << endl;
for (int i = 0; i < _index; i++)
cout << " " << _docs[i]->GetName() << endl;
}
/* Customization of framework defined by client */
class MyApplication: public Application
{
public :
MyApplication()
{
cout << "MyApplication: ctor" << endl;
}
/* Client defines Framework's "hole" */
Document *CreateDocument(char *fn)
{
cout << " MyApplication: CreateDocument()" << endl;
return new MyDocument(fn);
}
};
int main()
{
/* Client's customization of the Framework */
MyApplication myApp;
myApp.NewDocument("foo" );
myApp.NewDocument("bar" );
myApp.ReportDocs();
}
Last edited on Dec 6, 2014 at 7:32pm UTC