|
|
- #include <stdio.h>
- #define interface struct
- using namespace std;
- /*
- * Interface of this pure class, all methods were called by the pure class.
- */
- interface IXMLReaderContext
- {
- public:
- virtual void AddAttribute() const = 0;
- virtual void Display() const = 0;
- };
- class TVReader : public IXMLReaderContext
- {
- public:
- TVReader();
- ~TVReader();
- void AddAttribute() const;
- void Display() const { printf(" Inside TVReader...\n"); }
- }
- class HeadendFileReader : public IXMLReaderContext
- {
- public:
- HeadendFileReader();
- ~HeadendFileReader();
- void AddAttribute() const;
- void Display() const { printf("Inside HeadendFileReader...\n"); }
- };
- class RegistryReader : public IXMLReaderContext
- {
- public:
- RegistryReader();
- ~RegistryReader();
- void AddAttribute() const;
- void Display() const { printf("Inside RegistryReader...\n"); }
- };
- static void DisplayObject(IXMLReaderContext& Context);
- int main()
- {
- TVReader tvreader;
- HeadendFileReader headendreader;
- RegistryReader registryreader;
- DisplayObject(tvreader);
- DisplayObject(headendreader);
- DisplayObject(registryreader);
- return 0;
- }
- static void DisplayObject(IXMLReaderContext& Context)
- {
- Context.Display();
- }
复制代码
编译正常,链接有问题
- [root@root Parser]# g++ -c virtual.cpp -o virtual.o
- [root@root Parser]# g++ -o virtual virtual.o
- virtual.o(.text+0x19): In function `TVReader::TVReader()':
- : undefined reference to `vtable for TVReader'
- virtual.o(.text+0x39): In function `TVReader::TVReader()':
- : undefined reference to `vtable for TVReader'
- virtual.o(.text+0x48): In function `TVReader::~TVReader()':
- : undefined reference to `vtable for TVReader'
- virtual.o(.text+0x56): In function `TVReader::~TVReader()':
- : undefined reference to `vtable for TVReader'
- collect2: ld returned 1 exit status
- [root@root Parser]#
复制代码 |
|