虚函数纯虚函数测试

2022-05-27  本文已影响0人  赛非斯
class lens {
public:
    void test1();
    virtual void test2();
    virtual void test3()=0;
    lens();
    ~lens();
private:
};

派生一个类

class lens2:lens{
public:
    void test3() override;
    //void test4() override;
    lens2();
    ~lens2();
private:
};
D:/Work/cxxUtils/main.cpp: In function 'int main()':
D:/Work/cxxUtils/main.cpp:4:25: error: invalid new-expression of abstract class type 'lens'
    4 |     lens *l1 = new lens();

当我们注释掉virtual void test3()=0;的时候,就好了,说明带纯虚函数的类是抽象类 不能被初始化

D:/Work/cxxUtils/main.cpp:4:27: error: invalid new-expression of abstract class type 'lens2'
    4 |     lens2* l2 = new lens2();
D:/Work/cxxUtils/lens.h:22:10: error: 'void lens2::test4()' marked 'override', but does not override
   22 |     void test4() override;
      |          ^~~~~

实验四:
用基类指针指向子类实例,然后调用虚方法test2,结果打印-----> lens2::test2
说明虚函数可以实现重载。

lens* l1 = new lens2();
l1->test2();


void lens::test2() {
    cout<<"lens::test2"<<endl;
}

void lens2::test2() {
    cout<<"lens2::test2"<<endl;
}
上一篇 下一篇

猜你喜欢

热点阅读