C++ 从派生到基c++;

C++ 从派生到基c++;,c++,class,inheritance,C++,Class,Inheritance,代码most有1个基类、2个派生类和2个虚函数。在第一个虚函数(在第一个派生类中重新定义)中,我必须输入2个值来求和,或者只输入1个值以供以后使用;在第二个虚函数(在第二个派生类中重新定义)中,我需要输入2个值以进行减法运算,或者只输入1个值以与以后将要使用的值相乘或相除。我在加法或减法时没有问题,问题是当我尝试乘法或除法时 #include<iostream> #include<cstring> using namespace std; int op; int oo

代码most有1个基类、2个派生类和2个虚函数。在第一个虚函数(在第一个派生类中重新定义)中,我必须输入2个值来求和,或者只输入1个值以供以后使用;在第二个虚函数(在第二个派生类中重新定义)中,我需要输入2个值以进行减法运算,或者只输入1个值以与以后将要使用的值相乘或相除。我在加法或减法时没有问题,问题是当我尝试乘法或除法时

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

#包括
#包括
使用名称空间std;
int op;
int-oopp;
阶级基础
{
受保护的:
浮子a、b、c;
公众:
void calculo();
无效无效();
虚空datos1(){};
虚空datos2(){};
};
第1类:公共基础
{
公众:
void datos1();
};
第2类:公共基础
{
公众:
void datos2();
};
void derivida1::datos1()
{
如果(op==1)
{
库塔;
库特布;
}
如果(op==3)
{
库塔;
}
}
void derivida2::datos2()
{
如果(op==2)
{
库塔;
库特布;
}
如果(op==3)
{
库特布;
}
}
void base::calculo()
{
如果(op==1)
{
c=a+b;
}
如果(op==2)
{
c=a-b;
}
如果(op==3)
{
如果(oopp==4)
{
c=a*b;
}
如果(oopp==5)
{
c=a/b;
}
}
}
void base::imprimir()
{
如果(op==1)
{

你使用的输入是什么?到底错在哪里?你期望什么?我期望在要求程序进行乘法或除法时得到一个答案,因为当我用对象b调用calculo时,它只使用来自datos2的输入,而不是来自DATOS1的输入。例如,如果op的输入是3,那么oopp的输入是4,它首先保存“a”对于对象a,然后对对象b使用“b”,但当我尝试同时使用对象b和calculo时,就好像我从未对“a”输入过什么意思?我所能说的就是后退一步,重新思考处理作业的方式。在纸上写下你对工作的看法,然后再尝试一些代码来实现不要使用全局变量,而是传递参数。不要重复使用指针到对象,将它们分开,当对象需要交互时,考虑是否需要将一个对象传递到另一个对象,或者如果你能更好地处理与多个对象一起工作的自由函数。我不知道你的任务是什么,所以我不能真正提供。不止这些,祝你好运!