IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++第五章多态性习题:(快大结局了) -> 正文阅读

[C++知识库]C++第五章多态性习题:(快大结局了)

5539、

題目內容:

P178 例6.2

定义基类base,含有私有数据成员price和quantity。定义构造函数和虚函数以显示数据成员的值。

定义派生类derived,公有继承base。含有数据成员life。定义构造函数,以及虚函数以显示数据成员的值。。

主函数中定义派生类对象mc,初值为2000、2、18。指向基类的指针pc,取派生类对象的地址赋值给pc。实现派生类数据成员的输出。

输入输出说明:

输出:
price is 2000 quantity is 2
life is 18

#include<iostream>
using namespace std;
/*定义基类base,含有私有数据成员price和quantity。定义构造函数和虚函数以显示数据成员的值。

定义派生类derived,公有继承base。含有数据成员life。定义构造函数,以及虚函数以显示数据成员的值。。

主函数中定义派生类对象mc,初值为2000、2、18。指向基类的指针pc,取派生类对象的地址赋值给pc。实现派生类数据成员的输出。
*/
class base{
private:
    int price;
    int quantity;
public:
    base(int price,int quantity){
        this->price=price;
        this->quantity=quantity;
    }
    virtual void output(){
        cout<<"price is "<<price<<" quantity is "<<quantity<<endl;
    }
};
class derived :public base{
private :
    int life;
public:
    derived(int price,int quantity,int life):base(price,quantity){
        this->life=life;
    }
    virtual void output(){
        base::output();
        cout<<"life is "<<life<<endl;
    }
};
int main(){
    derived mc(2000,2,18);
    base *pc=&mc;
    pc->output();
}

5540、

題目內容:

P184 例6.8

定义基类a1和a2一个含有虚函数,输出一个串“--a1--”,另一个含有非虚函数,输出串“--a2--”。

定义派生类b,含有函数输出串“--b--”。

定义主函数分别定义两个基类的对象及指针。定义派生类的对象。取基类对象的地址赋值给基类的指针,并调用类中的同名函数。取派生类类对象的地址赋值给基类的指针,并调用类中的同名函数。以实现要求的输出。

输入输出说明:

输出:
--a1--
--a2--
--b--
--a2--

?

#include<iostream>
using namespace std;
/*定义基类a1和a2一个含有虚函数,输出一个串“--a1--”,另一个含有非虚函数,输出串“--a2--”。

定义派生类b,含有函数输出串“--b--”。

定义主函数分别定义两个基类的对象及指针。定义派生类的对象。
取基类对象的地址赋值给基类的指针,并调用类中的同名函数。取派生类类对象的地址赋值给基类的指针,
并调用类中的同名函数。以实现要求的输出
*/
class a1{
public:
    virtual void output(){
        cout<<"--a1--"<<endl;
    }

};
class a2{
public:
    void output(){
        cout<<"--a2--"<<endl;
    }
};
class b :public a1,public a2{
public:
    void output(){
        cout<<"--b--"<<endl;
    }
};
int main(){
    a1 obj1;
    a2 obj2;
    b obj3;
    a1 *e1=&obj1;
    e1->output();
    a2 *e2=&obj2;
    e2->output();
    e1=&obj3;
    e1->output();
    e2=&obj3;
    e2->output();
}

5541、

題目內容:

P199 例7.4

定义含有两个私有数据成员的类,其有友元的++运算符重载函数,分别为前自加和后自加。以实现要求的输出。

输入输出说明:

输出:
x: 11,y: 22
x: 12,y: 23
x: 13,y: 24
x: 14,y: 25
x: 15,y: 26

?

#include<iostream>
using namespace std;
/*定义含有两个私有数据成员的类,
其有友元的++运算符重载函数,分别为前自加和后自加。以实现要求的输出。
*/
class A{
public:
    int x,y;
public:
    A(int x,int y){
        this->x=x;
        this->y=y;
    }
    friend A operator++(A &obj);
};
A operator++(A &obj){
    obj.x++;
    obj.y++;
    return obj;
}
int main(){
    A obj(11,22);
    for(int i=1;i<=5;i++){
       
    cout<<"x: "<<obj.x<<","<<"y: "<<obj.y<<endl;
     obj=operator++(obj);
    }
    
}

5542、

題目內容:

P204 例子7.6

以成员函数重载运算符++,包括前自加和后自加以实现要求的输出。

输入输出说明:

输出:
x: 11,y: 22
x: 12,y: 23
x: 13,y: 24
x: 14,y: 25
x: 15,y: 26

?

#include<iostream>
using namespace std;

class A{
public:
    int x,y;
public:
    A(int x,int y){
        this->x=x;
        this->y=y;
    }
    A operator++(){
        this->x++;
        this->y++;
    return *this;
}
};

int main(){
    A obj(11,22);
    for(int i=1;i<=5;i++){
    cout<<"x: "<<obj.x<<","<<"y: "<<obj.y<<endl;
    obj.operator++();
    }
    
}

5543、

題目內容:

P216 例7.13

将运算符函数重载为友元函数,并用重载的运算符“<<”输出日期。

即对象出现在日期类的输出流中。

输入输出说明:

输出:
2016.4.28

?

#include<iostream>
using namespace std;
class Date{
protected:
    int day,month,year;
public:
    Date(int day,int month,int year){
        this->day=day;
        this->month=month;
        this->year=year;
    }
    friend ostream& operator<<(ostream &os,const Date &d);
};
ostream& operator<<(ostream &os,const Date &d){
        cout<<d.year<<"."<<d.month<<"."<<d.day<<endl;
        return os;
    }
int main(){
    Date d(28,4,2016);
    cout<<d;
}

5533、

題目內容:

编写程序,计算汽车运行的时间,首先建立基类car,其中含有数据成员distance存储两点间的距离。假定距离以英里计算,速度为每小时80英里,使用虚函数travel_time()计算并显示通过这段距离的时间。在派生类kilometre中,假定距离以千米计算,速度为每小时120千米,使用函数travel_time()计算并显示通过这段距离的时间。距离从键盘输入(80英里~128公里)

输入输出说明:

输入:
10000
输出:
base time is 78.125
derived time is 83.3333

?

#include<iostream>
using namespace std;
class car {
public:
	car (double distance) {		
		this->distance=distance;
	}
	virtual void travel_time() {	//虚函数,以英里为单位且时速80计算行车时间
		cout << "base time is " << distance / (80*1.6) << endl;
	};
protected:			//派生类的distance成员构造时会调用基类的构造函数
	double  distance;
};
class kilometer :public car {
public:
	virtual void travel_time() {	//虚函数,以千米为单位且时速120计算行车时间
		cout << "derived time is " << distance / 120 <<endl;
	}
    kilometer(double distance):car(distance){

    }
};
int main() {
    double  x;
    cin>>x;
	car c1(x);				//建立基类对象c1
	kilometer c2(x);			//派生类对象c2
	car *index = &c1;		//定义指向基类对象的指针index,指向c1
	index->travel_time();	//调用了基类对象c1的travel_time函数
	index = &c2;			//指向派生类的对象c2
	index->travel_time();	//调用了派生类对象c2的travel_time函数
	return 0;
}

5534、

題目內容:

编一个程序,用成员函数重载运算符“+”和“-”,将两个二维数组相加和相减,要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。

输入输出说明:

第一个3*3二维数组通过构造函数设置,值为:1 2 3 4 5 6 7 8 9
另一个3*3二维数组的值由键盘输入,从键盘输入的值为1 2 3 4 5 6 7 8 9
基于二维数组的类定义二个对象,进行加减运算,所得结果赋值给另外一个对象。显示输出。
输入:1 2 3 4 5 6 7 8 9
输出:
2 4 6
8 10 12
14 16 18
0 0 0
0 0 0
0 0 0

?

#include<iostream>
using namespace std;
const int n=3;
class Array{
    public:
        Array(){
            int k=1;
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    p[i][j]=k++;
                }
            }
        }
        Array(int a[n][n]){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    p[i][j]=a[i][j];
                }
            }
        }
        Array operator+(Array b){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    this->p[i][j]+=b.p[i][j];
                }
            }
            return *this;
        }
        Array operator-(Array b){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    this->p[i][j]-=b.p[i][j];
                }
            }
            return *this;
        }
        void show(){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    cout<<p[i][j]<<" ";
                }
                cout<<endl;
            }
        }
public:
    int p[n][n];

};
int main(){
    Array a1;
    int b[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>b[i][j];
        }
    }
    Array a2(b);
    Array a3=a1;
    a1=a1+a2.p;
    a1.show();
    a1=a3;
    a1=a1-a2.p;
    a1.show();
}

5535、

題目內容:

?编一个程序,用友元函数重载运算符“+”和“-”,将两个二维数组相加和相减,要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。

输入输出说明:

输入:1 2 3 4 5 6 7 8 9
输出:
2 4 6
8 10 12
14 16 18
0 0 0
0 0 0
0 0 0

?

#include<iostream>
using namespace std;
const int n=3;
class Array{
    public:
        Array(){
            int k=1;
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    p[i][j]=k++;
                }
            }
        }
        Array(int a[n][n]){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    p[i][j]=a[i][j];
                }
            }
        }
        void show(){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    cout<<p[i][j]<<" ";
                }
                cout<<endl;
            }
        }
        friend Array operator+(Array a,Array b);
        friend Array operator-(Array a,Array b);
protected:
    int p[n][n];

};
Array operator+(Array a,Array b){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    a.p[i][j]+=b.p[i][j];
                }
            }
            return a;
        }
Array operator-(Array a,Array b){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    a.p[i][j]-=b.p[i][j];
                }
            }
            return a;
        }
int main(){
    Array a1;
    int b[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>b[i][j];
        }
    }
    Array a2(b);
    Array a3;
    a3=operator+(a1,a2);
    a3.show();
    a3=operator-(a1,a2);
    a3.show();
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 11:55:13  更:2022-04-29 11:56:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:01:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码