如何在C ++中找到哪个子类调用父类的函数?

时间:2014-10-19 22:30:54

标签: c++ inheritance fopen

我有一个类A,它有一个名为openFile(const char * name)的函数,可以打开一个文件。

我有两个子课程ReaderWriter

Reader以阅读模式打开文件。 Writer以书写模式打开文件。

我正在使用fopen打开文件。

我想在读取模式或写入模式下打开此文件,具体取决于调用此方法的子类。

是否可以在不向父类发送任何额外参数的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

当然,类似这样的东西正是继承的意思:

class A {
    public:
    virtual void openFile(const char* name) = 0; 
    // If A cannot open a file on its own, else implement it

    // rest of implementation
};

class Reader : public A {
    public:
    virtual void openFile(const char* name) {//open file in read mode}
    //rest of implemenation
};

并处理Write类比。然后,给定指向或指向其中一个孩子的A*A&类型的指针或引用,将选择正确的函数:

A* a1 = new Reader{};
A* a2 = new Writer{};

a1->openFile("test.in");  // calls Reader.openFile()
a2->openFile("test.out"); // calls Writer.openFile()