类之间的互相调用问题

john110214 2011-03-01 01:25:26

我想在两个类中互相调用,重载*操作符。怎么不行呢?
#ifndef A_H_
#define A_H_
#include "B.h"
class A
{
public:
int i;
A operator * (B b)
{
A a;
a.i=i*b.j;
return a;
}
};
#endif


#ifndef B_H_
#define B_H_
#include "A.h"
class B
{
public:
int j;
B operator * (A a)
{
B b;
b.j=j*a.i;
return b;
}
};
#endif
//主程序
#include<iostream>
#include "A.h"
#include "B.h"
using namespace std;
int main()
{
A a;
a.i=4;
B b;
b.j=5;
A c=a*b;
cout<<c.i<<endl;
return 0;
}

...全文
104 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
管哥的天下 2011-03-01
  • 打赏
  • 举报
回复
详细请查看
http://blog.csdn.net/guandq2106/archive/2011/03/01/6215056.aspx
管哥的天下 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 john110214 的回复:]
C/C++ code

//A.h
#ifndef A_H_
#define A_H_
#include "B.h"
class B;
class A
{
public:
int i;
A operator * (B b);

};
#endif
//aa.app
#include "A.h"

A A::operator *(B b)
{
……
[/Quote]

很正确!
john110214 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pengzhixi 的回复:]
解释就是
A A::operator *(B b)
{
A a;
a.i=i*b.j;
return a;
}
在这个函数的完整定义之前B的定义必须完整可见
[/Quote]
You are right.
pengzhixi 2011-03-01
  • 打赏
  • 举报
回复
解释就是
A A::operator *(B b)
{
A a;
a.i=i*b.j;
return a;
}
在这个函数的完整定义之前B的定义必须完整可见
john110214 2011-03-01
  • 打赏
  • 举报
回复

//A.h
#ifndef A_H_
#define A_H_
#include "B.h"
class B;
class A
{
public:
int i;
A operator * (B b);

};
#endif
//aa.app
#include "A.h"

A A::operator *(B b)
{
A a;
a.i=i*b.j;
return a;
}
//B.h
#ifndef B_H_
#define B_H_
#include "A.h"
class A;
class B
{
public:
int j;
B operator * (A a);
};
#endif
//bb.app
#include "B.h"

B B::operator *(A a)
{

B b;
b.j=j*a.i;
return b;

}
//主程序
#include<iostream>
#include "A.h"
#include "B.h"
using namespace std;
int main()
{
A a;
a.i=4;
B b;
b.j=5;
A c=a*b;
cout<<c.i<<endl;
B d=b*a;
cout<<d.j<<endl;
return 0;
}

这样可以,谁能帮忙解释一下?
pengzhixi 2011-03-01
  • 打赏
  • 举报
回复

class B;
class A
{
public:
int i;
A operator * (B b);
};
class B
{
public:
int j;
B operator * (A a)
{
B b;
b.j=j*a.i;
return b;
}
};
A A::operator*(B b)
{
A a;
a.i=i*b.j;
return a;
}
放到一个cpp文件还行。
LinuxBirdMan 2011-03-01
  • 打赏
  • 举报
回复
用friend设为有元类
john110214 2011-03-01
  • 打赏
  • 举报
回复
我知道会有循环调用的问题,定义全局的重载操作符是可以解决。我只是想能不能有种方法,可以解决这样的问题,实现类之间可以互相调用?比如可以在一个类中定义另一个的指针对象。反正我是不会。求解!
xiaoboalex 2011-03-01
  • 打赏
  • 举报
回复
A和B的定义构成了循环依赖。operator*应该定义在类外。
#include<iostream>
using namespace std;

class A
{
public:
A(int m=0): i(m) {}
int i;
int get() const { return i; }
};

class B
{
public:
B(int n=0): j(n) {}
int j;
int get() const { return j; }
};

template<class T1, class T2>
T1 operator*(const T1& lhs, const T2& rhs)
{
return (lhs.get() * rhs.get());
}

int main()
{
A a;
a.i=4;
B b;
b.j=5;
A c=a*b;
cout<<c.i<<endl;
system("pause");
return 0;
}
ouyh12345 2011-03-01
  • 打赏
  • 举报
回复
直接使用变量,不需要再新建一个对象

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧