习题(c++期末知识复习5--)

在派生类中重新定义基类中的虚函数,是函数重载的另一种形式。
但虚函数与一般重载函数有区别,具体区别在于:
(1) 重载函数的调用是以所传递参数序列的差别作为调用不同函数的依据;而虚函数是根据对象的不同去调用不同类的虚函数。
(2) 重载函数在编译时表现出多态性,是静态联编;虚函数则在运行时表现出多态性,是动态联编。

**(3) 构造函数可以重载,析构函数不能重载;正好相反,构造函数不能定义为虚函数,
析构函数能定义为虚函数。
(4) 重载函数只要求函数有相同的函数名,并且重载函数是在相同作用域中定义的名字相同的不同函数;
而虚函数不仅要求函数名相同,而且要求函数的签名、返回类型也相同。
(5) 重载函数可以是成员函数或友元函数;而虚函数只能是非静态成员函数。
**

纯虚函数是一种特殊的虚函数,它是被标明为不具体实现的虚函数,从语法上讲,纯虚函数是在虚函数的后面加上“=0”,表示该虚函数无函数体,
这里的“=”并非赋值运算。

在一个类中如果虚函数不可能实现的太具体,则可以定义为纯虚函数。
纯虚函数为类的继承提供了连续的接口。

如果一个类中至少有一个纯虚函数,则这个类为抽象类。
如果派生类中没有再对基类中的纯虚函数进行重定义,则派生类也是抽象类。
不能定义抽象类的对象,但可以定义抽象类的指针和引用。
class ABC
{   public:
   virtual void open()=0;
};
class X: public ABC
{ public:
  virtual void open() {  }
};
class Y: public ABC
{ };

ABC a1;   //Error
X x1;//  √   因为x重定义了open() 函数
Y y1;       //Error

虚函数的实现

void func(Shape &p)  //形参为基类的引用
{ cout<<p.area()<<endl;}

int main()
{
    Shape shape;	//基类Figure对象
    cout<<"Area of shape is ";
    func(shape);
    Circle  c(3.0); 	//Circle派生类对象
    cout<<"Area of circle is ";
    func(c);
    Rectangle rec(4.0,5.0);//Rectangle派生类对象
    cout<<"Area of rectangle is ";
    func(rec);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值