class A {
public:
int a;
public:
A(int num) :a(num) {};
virtual A& func() {}; //虚函数
};
class B:public A{
public:
int b;
public:
B(int num) :A(num) {};
virtual B& func() {}; //重写了基类的虚函数
};
覆盖与隐藏都是子类出现与父类相同的函数名,但是有很多的不同
class A{
virtual void f1(int) const;
virtual void f2();
void f3();
};
calss B:public A{
void f1(int)const override; //正确
void f2(int)override; //错误,参数不一致
void f3()override; //错误,f3不是虚函数
void f4()override; //错误,B没有名为f4的函数
};
class A
{
virtual void func1()final {};
};
class B:public A
{
virtual void func1()override {}; //报错,func1被A声明为final类型
};
class A
{
virtual void func1() {};
};
class B:public A
{
virtual void func1()override final {}; //正确
};
class C :public B
{
virtual void func1()override {}; //报错,func1被B声明为final类型
};
class A
{
virtual void func1(int a, int b = 10) {};
};
class B:public A
{
virtual void func1(int a,int b=10)override {}; //没有改变
};
class C :public B
{
virtual void func1(int a, int b = 20)override {}; //改变了默认实参,不建议
};
class D :public C
{
virtual void func1(int a, int b)override {}; //删去了默认实参,那么在调用fun1时,必须传入a和b
};
class A
{
public:
void show()const{
cout << "A";
};
};
class B :public A //B继承于A
{
public:
void show()const{
cout << "B";
};
};
void printfShow(A const& data)
{
data.show();
}
int main()
{
A a;
B b;
printfShow(a);
printfShow(b);
return 0;
}
class A
{
public:
virtual void show()const{
cout << "A";
};
};
#include <iostream>
using namespace::std;
class A
{
public:
virtual void func1() { cout << "A" << endl; };
};
class B:public A
{
public:
virtual void func1()override { cout << "B" << endl; };
};
int main()
{
A *p;
B b;
p = &b;
p->A::func1(); //正确,打印A
//p->B::func1(); //错误的用法
p->func1(); //正确,打印B
return 0;
}