通过基类指针访问派生类

可以使用多态性来通过基类指针访问子类。当一个基类的指针指向一个派生类的对象时,可以使用以下方式访问子类。

使用虚函数

将函数声明为虚函数,并在派生类中重写该函数,然后通过基类指针调用该函数,将会调用到派生类的实现,从而访问派生类。

class Base {
public:
    virtual void print() {
        cout << "这是基类" << endl;
    }
};

class Derived : public Base {
public:
    void print() {
        cout << "这是派生类" << endl;
    }
};

int main() {
    Base* p = new Derived();
    p->print(); // 输出:“这是派生类”
    return 0;
}

使用动态类型转换

通过将基类指针转换成派生类指针,然后访问派生类的成员。

class Base {
    // ...
};

class Derived : public Base {
public:
    int value;
};

int main() {
    Base* p = new Derived();
    Derived* q = dynamic_cast<Derived*>(p);
    q->value = 1;
    return 0;
}

在使用动态类型转换之前,需要使用 dynamic_cast 进行类型检查,以确保指针可以安全地进行转换。

posted @ 2023-03-05 17:43  chilkings  阅读(256)  评论(0编辑  收藏  举报