赋值兼容规则(基类和派生类对象赋值转换)
1.派生类对象直接赋值给基类对象
2.派生类对象的地址可以直接给基类对象的指针赋值
3.派生类对象直接赋值给基类的引用对象赋值
//覆盖(重写)
class A
{
public:
virtual void Eat()
{
cout<<"A::Eat()"<<endl; //??????
}
virtual void Foot()
{
cout<<"A::Foot()"<<endl;
}
virtual void Sleep()
{
cout<<"A::Sleep()"<<endl;
}
};
class Person : public A
{
public:
void Eat()
{
cout<<"Person::Eat()"<<endl; //??????
}
void Foot()
{
cout<<"Person::Foot()"<<endl;
}
void Sleep()
{
cout<<"Person::Sleep()"<<endl;
}
};
class Dog : public A
{
public:
void Eat()
{
cout<<"Dog::Eat()"<<endl; //??????
}
void Foot()
{
cout<<"Dog::Foot()"<<endl;
}
void Sleep()
{
cout<<"Dog::Sleep()"<<endl;
}
};
class XLQ : public A
{
void Eat()
{
cout<<"XLQ::Eat()"<<endl; //??????
}
void Foot()
{
cout<<"XLQ::Foot()"<<endl;
}
void Sleep()
{
cout<<"XLQ::Sleep()"<<endl;
}
};
void Active(A *pa) //覆盖(重写)
{
pa->Eat();
pa->Foot();
pa->Sleep();
}
int main()
{
Person p;
Dog d;
XLQ xlq;
Active(&xlq);
Active(&d);
Active(&p);
return 0;
}
抽象类
在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类
不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继
//抽象类 example
class Car
{
public:
virtual void Drive() = 0;
};
class Benz :public Car
{
public:
virtual void Drive()
{
cout << "Benz-舒适" << endl;
}
};
class BMW :public Car
{
public:
virtual void Drive()
{
cout << "BMW-操控" << endl;
}
};
void Test()
{
Car* pBenz = new Benz;
pBenz->Drive();
Car* pBMW = new BMW;
pBMW->Drive();
}