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;
}