final和 override

 final

c++增加了final关键字来限制某个类不能被继承或者某个虚函数不能被重写,如果final修饰函数只能修饰虚函数,并且要把final关键字放到类或者函数的后面

修饰函数

如果是使用final修饰函数,只能修饰虚函数,这样就可以组织子类重写父类这个函数

class Base
{
public:
    virtual void test()
    {
        cout<<"Base class...";
    }
};

class Child:public Base
{
public:
    void test()final
    {
    cout<<"Child class...";
    }
};

class GrandChild:public Child
{
public:
    //语法错误,不允许重写
    void test()
    {
        cout<<"GrandChild class...";
    }
};

修饰类

使用final关键字修饰过的类不允许被继承,也就是说这个类不能有子类

class Child final:public Base
{
public:
    void test()
    {
        cout<<"Child class...";
    }
};

//语法错误
class GrandChild:public Child
{
public:
};

 override

 override关键字明确的表明将会重写父类的虚函数,和final的用法相同,放在函数后面。提高了程序的正确性,降低了出错概率.

class Base
{
public:
    virtual void test()
    {
        cout<<"Base class...";
    }
};

class Child:pubic Base
{
public:
    //正确,重写了父类的虚寒是
    void test() override
    {
        cout<<"Child class...";
    }
};

class GrandChild:public Child
{
public:
    //报错,父类中没有相同的虚函数可以被重写
    void test(int a) override
    {
        cout<<"Child class...";
    }
};

猜你喜欢

转载自blog.csdn.net/four_two_six_/article/details/130884658