每日打卡一小时(第十五天)多态

一.问题描述

补充下列代码,使得程序的输出为:

A:3

A:15

B:5

3

15

5

类和函数接口定义:

 
参见裁判测试程序样例中的类和函数接口。
 

裁判测试程序样例:

 
#include <iostream>
using namespace std;
class CMyClassA {
    int val;
public:
    CMyClassA(int);
    void virtual print();
};
CMyClassA::CMyClassA(int arg) {
    val = arg;
    printf("A:%d\n", val);
}
void CMyClassA::print() {
    printf("%d\n", val);
    return;
}

/* 在这里填写代码 */

int main(int argc, char** argv) {
    CMyClassA a(3), *ptr;
    CMyClassB b(5);
    ptr = &a;
    ptr->print();
    a = b;
    a.print();
    ptr = &b;
    ptr->print();
    return 0;
}

二.设计思路

观察主函数和结果可以得到上述问题是虚函数同名的多态问题

即基类表示派生类时有同名函数用虚函数可以直接调用派生类中的函数,否则就是调用基类中的函数

三.代码实现

class CMyClassB:public CMyClassA
{
      int val;
      public:
      CMyClassB(int);
      void print();
};
CMyClassB::CMyClassB(int arg):CMyClassA(3*arg)
{
    val=arg;
    cout<<"B:"<<val<<endl;
}
void CMyClassB::print()
{
    cout<<val<<endl;
}

 

 

一.问题描述

定义一个整数加法器类Adder,对其重载运算符“+”、“++”,main(void)函数完成对其的测试。

#include <iostream>
using namespace std;

/*请在这里填写答案*/

//主函数
int main(void){
    int x;
    Adder a1,a2(a1);
    cin>>x;
    (a1++).show();
    a1.show();
    a2.setNum(x);
    (++a2).show();
    a2.show();
    (a1+a2).show();
    return 0;
}

 

二.代码实现

class Adder
{
    int num;
    public:
    Adder(int n=0);
    Adder(Adder &p);
    void setNum(int x);
    int getNum()const;
    Adder operator+(const Adder &c)const;
    Adder operator++ (int);
    Adder& operator++();
    void show()const;
    ~Adder();
};
Adder::Adder(int n):num(n)
{
    cout<<"Adder Constructor run"<<endl;
}
Adder::Adder(Adder &p)
{
    this->num=p.getNum();
    cout<<"Adder CopyConstructor run"<<endl;
}
void Adder::setNum(int x)
{
    num=x;
}
int Adder::getNum() const
{
    return num;
}
Adder Adder::operator+(const Adder &c)const
{
    return Adder(this->num+c.getNum());
}
Adder& Adder::operator++()
{
    num++;
    return *this;
}
Adder Adder::operator++(int)
{
    Adder m=*this;
    ++(*this);
    return m;
}
void Adder::show()const
{
    cout<<"Adder("<<num<<")"<<endl;
}
Adder::~Adder()
{
    cout<<"Adder Destructor run"<<endl;
}

 

 
posted @ 2023-04-24 19:12  伐木工熊大  阅读(24)  评论(0)    收藏  举报