虚基类函数

/*
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: object.cpp
* 作者:王飞
* 完成日期:2013 年5月 31日
* 版本号: v1.0
* 输入描述:无
* 问题描述:练习虚函数。
* 程序输出:如下
*/


#include <iostream>
using namespace std;
#define PI 3.1415926

//声明抽象基类Shape
class Shape
{
public:
    virtual double area(){return 0;}
};
class Circle:public Shape
{
public:
    Circle(double r0):r(r0){};
    double area();          //面积
private:
    double r;
};
double Circle::area()
{
    return PI*r*r;
}
class Rectangle:public Shape
{
    public:
    Rectangle(double c0,double k0):c(c0),k(k0){};
    double area();
private:
    double c;
    double k;
};
double Rectangle::area()
{
    return c*k;
}
class Triangle:public Shape
{
public:
    Triangle(double c0,double k0):c(c0),k(k0) {};
    double area();
private:
    double c;
    double k;
};
double Triangle::area()
{
    return 0.5*c*k;         //返回三角形的面积
}
int main()
{
    Circle c1(12.6),c2(4.9);//建立Circle类对象c1,c2,参数为圆半径
    Rectangle r1(4.5,8.4),r2(5.0,2.5);//建立Rectangle类对象r1,r2,参数为矩形长、宽
    Triangle t1(4.5,8.4),t2(3.4,2.8); //建立Triangle类对象t1,t2,参数为三角形底边长与高
    Shape *pt[6]= {&c1,&c2,&r1,&r2,&t1,&t2}; //定义基类指针数组pt,使它每一个元素指向一个派生类对象
    double areas=0.0; //areas为总面积
    for(int i=0; i<6; i++)
    {
        areas=areas + pt[i]->area();
    }
    cout<<"totol of all areas="<<areas<<endl;   //输出总面积
    return 0;
}





输出结果:

 

心得体会:

对于虚基类函数的使用其中遇到的问题就是const的问题,进一步探讨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
虚基类和虚函数是面向对象编程中两个不同的概念,它们在实现多态性时起到关键作用。 **虚函数(Virtual Function)**: 虚函数是在基类中声明为虚的成员函数,当从派生类的对象上调用该函数时,会自动关联到实际的对象类型(即动态绑定),而不是基类。这样可以确保使用子类的行为,即使在基类指针或引用上调用。虚函数的定义通常在基类中使用`virtual`关键字。 **虚基类(Virtual Base Class)**: 虚基类是一个特殊的基类,当一个派生类继承自虚基类时,所有从虚基类继承的成员都将成为该派生类的一部分,但每个派生类只有一份拷贝。这样可以避免产生多次的间接继承,减少内存浪费,并简化继承关系。声明虚基类使用`virtual`关键字放在继承列表的最前面。 总结一下区别: 1. **目标不同**:虚函数的目标在于实现运行时的多态,使基于基类的指针/引用能正确调用相应子类的行为;虚基类则是为了解决多个层次继承中的重复和复杂性问题。 2. **应用场合**:虚函数主要在需要动态行为的继承场景中使用;虚基类则在有深层次嵌套继承且需要简化结构时考虑。 3. **语法不同**:虚函数是成员函数级别的声明;虚基类是类级别的声明,并影响整个继承链。 相关问题: 1. 虚函数如何实现动态绑定? 2. 虚基类如何解决多重继承中的问题? 3. 如何在类声明中指定一个基类为虚基类

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值