C++面向对象程序设计上机练习三

1.已知A为自定义类型,具有成员函数Print(),同时定义变量:

A a1, a2, a3, a4;
下列语句不正确的是( )

  • A *array1[4]={&a4, &a3, &a2 };
  • array1[0]->Print();
  • array1[0]=&a1;
  • (*array1)[0].Print();

2.纯虚函数填空

试题描述

请仔细阅读代码,填写下面空白。

   ①    //必要的头文件等,可能为多条语句
   ②    //抽象类A
{
      ③    //纯虚函数F,函数无返回值
};
   ④    //从A类公有派生B类
{
   public:
         ⑤    const //纯虚函数F被重写,函数体如下
      {
         cout << "B::F" << endl;
      }
};
int main()
{
   #define N 3

   B    ⑥    //依据题意,创建对象
   A *a[N] = {new B(), new B(), &b3};

   for(int i = 0; i < N; i++)
   a[i]->F();

   delete a[0];
   delete a[1];
   return 0;
} 

注意:1.请务必提交完整的程序代码,不要修改代码框架。2.请不要修改试题描述中的所有标识符,注意大小写敏感。

输入

无输入。

输出

依据题意输出若干行。

输出示例

B::F
B::F
B::F

代码实现

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
class A//抽象类A
{
public:
    virtual void F()const=0;//纯虚函数F,函数无返回值
};
class B:public A//从A类公有派生B类
{
   public:
      void F()const //纯虚函数F被重写,函数体如下
      {
         cout << "B::F" << endl;
      }
};
int main()
{
   #define N 3

   B b3;//依据题意,创建对象
   A *a[N] = {new B(), new B(), &b3};

   for(int i = 0; i < N; i++)
   a[i]->F();

   delete a[0];
   delete a[1];
   return 0;
}

注意: 派生类函数F( )函数声明了const,所以基类的纯虚函数相应位置也应声明const,否则会报错

3.虚析构函数之又谈图像类

试题描述

定义基类Image图像类,公有派生出Png图像类,两个类的成员描述如表1和表2所示。
在这里插入图片描述在这里插入图片描述

int main()
{
   int a, b;
   cin >> a >> b;
   Image *png = new Png(a, b); //创建Png图像类的对象png
   cout << "图像宽:" << png->GetWidth() << endl;
   cout << "图像高:" << png->GetHeight() << endl;
   delete png;
   return 0;
} 

注意:1.请务必提交完整的程序代码,不要修改代码框架。2.请不要修改试题描述中的所有标识符,注意大小写敏感。

输入

输入两个非负整数,用一个空格隔开。

输出

输出两行,分别为图像的宽和高。

输入示例

800 600

输出示例

图像宽:800
图像高:600

数据范围

输入int范围的非负整数

代码实现

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
class Image
{
protected:
    int width,height;
public:
    Image(int w,int h)
    {
        width=w;
        height=h;
    }
    virtual ~Image(){}
    int GetWidth()
    {
        return width;
    }
    int GetHeight()
    {
        return height;
    }
};
class Png:public Image
{
protected:
    char *pnglib;
public:
    Png(int w,int h):Image(w,h)
    {
        pnglib=new char[(w+h)*4];
    }
    ~Png()
    {
        delete []pnglib;
    }
};
int main()
{
   int a, b;
   cin >> a >> b;
   Image *png = new Png(a, b); //创建Png图像类的对象png
   cout << "图像宽:" << png->GetWidth() << endl;
   cout << "图像高:" << png->GetHeight() << endl;
   delete png;
   return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值