#include <iostream>
class Base{
public:
virtual void do_something()
{
std::cout<<"Person"<<std::endl;
}
virtual void print_self() final
{
std::cout<<"Person"<<std::endl;
}
};
class SubClass1 : public Base{
public:
// override 关键字将显式的告知编译器进行重载,编译器将检查基函数是否存在这样的虚函数
// 否则将无法通过编译
void do_something() override
{
std::cout<<"SubClass1"<<std::endl;
}
//void do_something1() override {} // 非法,显示定义override,但父类没有同名对应的虚函数
};
void test1()
{
SubClass1 *sc = new SubClass1;
Base *base = sc;
base->do_something();
}
// final 则是为了防止类被继续继承以及终止虚函数继续重载引入的。
class SubClass2 final : public Base{ // 合法
public:
void do_something() override
{
std::cout<<"SubClass2"<<std::endl;
}
};
void test2()
{
SubClass2 *sc = new SubClass2;
Base *base = sc;
base->do_something();
}
// 非法,不能将final标识的SubClass2作为基类
class SubClass3 : public SubClass2{
public:
};
class SubClass4 : public Base{
public:
virtual void print_self()// 非法,不能将final标识的父类虚函数进行重写
{
std::cout<<"Person"<<std::endl;
}
};
// default显示使用编译生成的构造函数,delete显示声明拒绝编译器所生成的构造函数
class Magic {
public:
Magic() = default; // 显式声明使用编译器生成的构造
Magic& operator=(const Magic&) = delete; // 显式声明拒绝编译器生成构造
Magic(int magic_number);
}
int main()
{
test1();
test2();
return 0;
}
C++新特性overrid final default delete
最新推荐文章于 2022-06-25 23:49:51 发布