代码的要求是B中的私有fun作为A的友元函数,能访问A中的私有元素,然后B中要包含A的对象,但是由于友元声明问题,只能声明指向A的指针
我希望能不用指针,而是直接使用A的对象,怎么修改?
如果有学习C++的大佬,交个朋友
1 #include <iostream> 2 //声明A,B中要使用A的指针 3 class A; 4 class B { 5 friend class A; 6 private: 7 A* pa;//使用指针 8 void fun();//能访问A中私有成员的函数 9 public: 10 B(); 11 void sss();//调用fun()的接口 12 }; 13 //再来定义A,使用友元声明 14 class A { 15 private: 16 int i; 17 int j; 18 friend void B::fun(); 19 }; 20 21 void B::fun() { 22 pa->i = 8; 23 std::cout << pa->i << std::endl; 24 } 25 26 B::B() : pa(new A) {} 27 28 void B::sss() { 29 fun(); 30 } 31 32 int main() 33 { 34 B b; 35 b.sss(); 36 return 0; 37 }
如果在B
中的A
要是实例,那么在B
实例化的时候A
已经完成了实例化了,编译器是从上到下编译的,所以需要把B类的定义放在A
类下面,但是A类在实例化的时候要对B
类的fun
函数设为友元,要知道fun
函数的实例才行,而由于为满足前面不用指针的条件,A类首先实例化,它不知道fun函数是什么,综上呢,A的声明要先于B,B的声明又要先于A,这。。。既然是C++,引用型变量不好吗?
引用确实可行,这篇文章只是为了找人一起努力而已,兄弟能不能留个联系方式?