首页 > 解决方案 > 数据成员从派生到基本c ++的反向继承

问题描述

大多数代码有 1 个基类、2 个派生类和 2 个虚函数。在第一个虚拟函数中(在第一个派生类中重新定义)我必须输入 2 个值来对它们求和,或者只输入一个值以供以后使用,在第二个虚拟函数中(在第二个派生类中重新定义)我需要输入减去 2 个值,或者只用一个值乘以或除以稍后将使用的值。我在加法或减法时没有问题,问题是当我尝试乘法或除法时。

#include<iostream>
#include<cstring>

using namespace std;

int op;
int oopp;

class base
{
protected:
    float a,b,c;
public:
    void calculo();
    void imprimir();
    virtual void datos1(){};
    virtual void datos2(){};
};

class derivada1:public base
{
public:
    void datos1();
};

class derivada2:public base
{
public:
    void datos2();
};

void derivada1::datos1()
{
    if(op==1)
        {
            cout<<"a = ";
            cin>>a;
            cout<<"b = ";
            cin>>b;
        }
    if(op==3)
        {
            cout<<"a = ";
            cin>>a;
        }
}

void derivada2::datos2()
{
    if(op==2)
        {
            cout<<"a = ";
            cin>>a;
            cout<<"b = ";
            cin>>b;
        }
    if(op==3)
        {
            cout<<"b = ";
            cin>>b;
        }
}

void base::calculo()
{
    if(op==1)
        {
            c=a+b;
        }
    if(op==2)
        {
            c=a-b;
        }
    if(op==3)
        {
            if(oopp==4)
                {
                    c=a*b;
                }
            if(oopp==5)
                {
                    c=a/b;
                }
        }
}

void base::imprimir()
{
    if(op==1)
        {
            cout<<"c = "<<c<<endl;
        }
    if(op==2)
        {
            cout<<"c = "<<c<<endl;
        }
    if(op==3)
        {
            if(oopp==4)
                {
                    cout<<"c = "<<c<<endl;
                }
            if(oopp==5)
                {
                    cout<<"c = "<<c<<endl;
                }
        }
}

int main()
{
    base *p;
    derivada1 a;
    derivada2 b;
    cout<<"op = ";
    cin>>op;
    //1 sum
    //2 substraction
    //3 multiply or divide
    switch(op)
    {
    case 1:
        p = &a;
        p->datos1();
        p->calculo();
        p->imprimir();
        break;
    case 2:
        p = &b;
        p->datos2();
        p->calculo();
        p->imprimir();
        break;
    case 3:
        cout<<"oopp = ";
        cin>>oopp;
        switch(oopp)
        {
        case 4:
            p = &a;
            p->datos1();
            p = &b;
            p->datos2();
            p->calculo();
            p->imprimir();
        break;
        case 5:
            p = &a;
            p->datos1();
            p = &b;
            p->datos2();
            p->calculo();
            p->imprimir();
        break;
        default:
            cout<<"bye!"<<endl;
            break;
        }
    default:
        cout<<"bye!"<<endl;
        break;
    }
}

抱歉,如果代码太多,我尽量减少它

标签: c++classinheritance

解决方案


推荐阅读