首页 > 其他分享 >每日打卡一小时(第十五天)多态

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

时间:2023-04-24 19:22:14浏览次数:32  
标签:show int CMyClassA void 多态 ++ Adder 打卡 第十五天

一.问题描述

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

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

 

 

标签:show,int,CMyClassA,void,多态,++,Adder,打卡,第十五天
From: https://www.cnblogs.com/zhenaifen/p/17350586.html

相关文章

  • 打卡9
    折半查找#include<stdio.h>#defineN10intmain(){ inta[N]={-3,4,7,9,13,45,67,89,100,180},low=0,high=N-1,mid,k=-1,m; printf("a数组中的数据如下:\n"); for(inti=0;i<N;i++) printf("%d",a[i]); printf("\n"); printf("Ente......
  • 周一打卡
    问题描述:有一百块钱,要买100只鸡。公鸡5元一只,母鸡3元一只,小鸡1元三只。问要买几只公鸡、母鸡和小鸡?设计思路:这是一道数学问题,可以用穷举法解决。首先,循环公鸡的数量,然后在循环母鸡的数量,最后计算小鸡的数量,判断是否符合题目要求(钱数和数量)。程序流程图:1.循环公鸡的数......
  • 编程打卡:来玩玩Ruby语言吧!
    编程打卡:来玩玩Ruby语言吧!打印字符串"Hello,World."puts('Hello,World')Hello,World=>nil在字符串"Hello,Ruby."中,找到"Ruby."的所在下标'Hello,Ruby.'.index('Ruby')=>7打印你的名字十遍foriin1..10puts('......
  • 打卡11
    2.8猜数牌 基本框架for(inti=1;i<=13;i++)//循环13次,每次将一张牌放进盒子 { intn=1; do//内循环找盒子,将i号牌放入 { //如果盒子非空,继续找下一个盒子 //如果盒子空,判断盒子序号和牌序号是否相同,相同则存入 }while(n<=i); }do { if......
  • 打卡第十天
    读入一系列整数,统计出正整数的个数i和负整数个数j,读入0则结束一、1.定义变量用于存储整数2.运用while循环语句进行统计二、三、#include<iostream>usingnamespacestd;intmain(){ inti=0,j=0,n; cout<<"输入一系列整数:"<<endl; cin>>n; while(n!=0) { if(n>0)i+=1; el......
  • 2022.4.23编程一小时打卡
    一、问题描述:定义一个基类,派生出子类,基类有fn1(),fn2(),fn1()是虚函数;子类也有这俩个函数,在主函数中声明子类的一个对象,并通过指针调用这俩个函数。观察程序运行过程。二、解题思路:首先,定义一个基类BaseClass类,其派生出子类DerivedClass类,在主函数中定义基类的指针,调用这俩个函......
  • 天天打卡一小时第八天
    天天打卡一小时第八天问题描述实验2-3找出三位水仙花数本题要求编写程序,输出给定正整数M和N区间内的所有三位水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。输入格式:输入在一行中给出两个正整数M和N(100≤M≤N≤999)。输出格式:顺序输出M和N区间内所有三......
  • 每日打卡
    /*模块格式:template<classT>返回值类型函数名(参数形参表){ 函数体;}*///#include<iostream>//usingnamespacestd;//template<classT>//TGetMax(Ta,Tb)//{// Tresult;// result=(a>b?a:b);// returnresult;//}//intmain()//{// inti=5,j=6,k;//......
  • c++打卡十三天
    一、问题描述。 二、设计思路①、首先我们是用二分法解决这个问题。二分法是指在一个有序数组中,我们通过目标数与数组中间值的比较,对半缩小数组范围,比如一个升序数组中间值是4,当我们寻找一个比四小的数字时,只需要从首位和中间值中寻找,然后继续确定新的中间值,长此以往,就可以有......
  • 每日一小时打卡pc端毕业设计(具有人脸专注度检测和人脸识别的监控功能)
               代码:#coding=utf-8importcv2ascvimportcv2importdatetimeimportbase64importtimeimportimutilsimportdlibfromimutilsimportface_utilsfromscipy.spatialimportdistanceasdistfromPILimportImage,I......