类的调用
1) 若A类想在类体内实例化对象b,则B类需在A类定义之前有完整的定义。
class A
{
public:
B b;//实例化对象b---->>>(错误)B类没有在A类之前没有定义
void fun_A()
{
b.fun_B();
}
};
class B
{
public:
void fun_B()
{
cout<<"this is fun_B"<<endl;
}
};
把B类放在A类之前定义即可
class B
{
public:
void fun_B()
{
cout<<"this is fun_B"<<endl;
}
};
class A
{
public:
B b;///实例化对象b----->>(正确)
void fun_A()
{
b.fun_B();
}
}
2) B类的成员函数是在类体外定义,而A类想要调用。
B类需在A类前作前向声明,而且A类不能实例化B类对象,只能声明B类指针或引用
class A
{
public:
B *l
void fun_A()//---->>错误(类体内不能调用B类成员函数)
{
l->fun_B();
}
};
class B
{
public:
void fun_B()
{
cout<<"this is fun_B"<<endl;
}
};
int main()
{
A a;
a.fun_A();
return 0;
}
所以在一个类没有完整的定义时,另一个类是不能调用其成员。
#include <iostream>
using namespace std;
class B;//---->>B类前向声明
class A
{
public:
B *l;//---->>声明一个B类指针l(或声明一个引用B &l)
void fun_A()//---->>A类成员函数声明()
};
class B
{
public:
void fun_B()
{
cout<<"this is fun_B"<<endl;
}
};
void A::fun()//---->>正确(A类成员函数定义(B类已有的定义))
{
l->fun_B();
}
int main()
{
A a;
a.fun();
return 0;
}