注册 登录
编程论坛 C++教室

类的构造函数问题

周正己 发布于 2013-09-15 18:06, 873 次点击
刚开始学C++。老师让编一个工程要求,就是主函数输入1234让一个类去判断+—*/,如何再去调用另一个类去运算很简单。可我就是在这个构造函数上不知道怎么办求大神指导
11 回复
#2
周正己2013-09-15 18:09
class B{
public:
    class A a;
    B(int o,int p){
    A(o,p);};
    void l(A a){
        
        a.sum();

    };
};
class A{
public:
    A(int o,int p){
        a=o;b=p;
    };
    void sum(){
        std::cout<<"sum is"<<"a+b"<<std::endl;
    };
private:
    int a,b;
};
#include<iostream>
#include "A.h"
#include "B.h"
using namespace std;
int main(){
    int o,p,r;
    B j;A a;
   
   
    cout<<"input o,p"<<endl;
    cin>>o;
    cin>>p;
    A(o,p);B(o,p);
    cout<<"input1+2-3*4/"<<endl;
    cin>>r;
    if (r=1)
        j.l(a);
    else return 0;
    system("pause");
    return 0;
}
我写的一部分程序,只搞加法了,不过程序是错的,构造函数不知道咋办
#3
blueskiner2013-09-15 18:11
。。。不是很明确。输入1234,什么意思?
#4
blueskiner2013-09-15 18:41
#ifndef __A_H__
#define __A_H__

class A{
public:
    A(int o,int p){
        a=o;b=p;
    };
    void sum(){
        std::cout<<"sum is"<<"a+b"<<std::endl;
    };
private:
    int a,b;
};

#endif    // __A_H__


#ifndef __B_H__
#define __B_H__

#include "a.h"

class B{
public:
    B(int o,int p) : a(o,p)
    {
        //A(o,p);
    }
    void l(A a){
        a.sum();
    }
private:
    A a;
};

#endif    // __B_H__

#include<iostream>
using namespace std;

#include "b.h"

int main(){
    int o,p,r;
    cout<<"input o,p"<<endl;
    cin>>o;
    cin>>p;
//     A(o,p);
//     B(o,p);
    B j(o,p);
    A a(o,p);
    cout<<"input1+2-3*4/"<<endl;
    cin>>r;
    if (r=1) {
        j.l(a);
    } else {
        return 0;
    }
    system("pause");
    return 0;
}
#5
周正己2013-09-15 18:41
1234对应着+-*/
用户只用输入1234选择加减乘除,然后就能计算出他想要的结果
#6
blueskiner2013-09-15 18:55
具体怎么实现,看各人思路,反正C++类中的自定义类型成员变量,要使用该成员变量的自定义构造函数来进行对象初始化,必须使用该类的初始化序列来完成。
例如,B类中的A类成员变量,要想使用A的自定义构造函数,就必须在B对象构造时,在B的初始化序列中对a进行。。。。
#7
周正己2013-09-15 18:57
回复 3楼 blueskiner
大神写的程序很厉害 不是俺这种初学者能写出来的呵呵,我都不知道那endif啥意思。我就是想用一个工程然后包括一个main,一个A.h,一个B.h,您这个思想和我一样,我就是不知道怎么用B这个类去调用A这个类。初学者呵呵
#8
blueskiner2013-09-15 19:01
只有本站会员才能查看附件,请 登录
read the fucking source code...
#9
can39811322013-09-15 20:58
什么意思没看懂
#10
周正己2013-09-15 21:17
回复 7楼 周正己
class A{
public:
    A(int o,int p){
        a=o;b=p;
    };
    void sum(){
        std::cout<<"sum is"<<a+b<<std::endl;
    };
private:
    int a,b;
};
class B{
public:

    B(int o,int p):a(o,p){};
    void l(A a){
        
        a.sum();
    };
private:
    A a;

    };
#include<iostream>
#include"A.h"
#include "B.h"
using namespace std;
int main(){
    int o,p,r;
    //B j;A a;
   
   
    cout<<"input o,p"<<endl;
    cin>>o;
    cin>>p;
    B j(o,p);A a(o,p);
    cout<<"input1+2-3*4/"<<endl;
    cin>>r;
    if (r=1)
        j.l(a);
    else return 0;
    system("pause");
    return 0;
}
大神,我编出的程序也能执行,也不懂您给我的程序里那些复杂的语言是啥意思呵呵主要我是初学,请您看一下帮忙看我这样调用的对不对,我怕可能不是从B中调A,而是直接调A呵呵,麻烦您帮忙看一下
#11
blueskiner2013-09-16 07:26
void l(A a){
        a.sum();
    };

这里可能有问题,B中的成员变量a跟实际你在main中实例化的a是不一样的,在main中实例化的b中,已经有一个成员变量a了。所以,main中那个a,用你的话说,就不是在B中调用了。函数的传值你应该学过吧。没学过就先看看书对于函数的解析。
#12
人_神2013-09-16 20:31
学习
1