C++类中的有元理解

来源:互联网 发布:mac鼠标滚轮设置 编辑:程序博客网 时间:2024/06/05 14:28

关于C++ 中有元函数的理解

class A{private: int a;int b;public:A(){a = 3;b = 5;}void funA();};class B{private:int x;int y;public:B(){x= 1;y =2;}friend void A::funA();friend void fun()//在进行有元定义的同时也进行函数的定义,而fun 函数在此之前没有任何声明,而这个函数的作用域和这类的作用域是一样的。{B tmp;tmp.x = 3;tmp.y = 4;}friend class C;//这个也同样,进行了类的声明。但是C只是声明还未定义,所以不能够使用。};void A::funA(){B tmp;tmp.x = this->a;//这里对B 中的私有成员的值进行了修改。tmp.y = this->b;cout <<"x = "<<tmp.x<<"   y="<<tmp.y<<endl;}


首先有元的目的是 给特权,让外部的函数或则其他的类能够访问本类中的私有成员。

那么这有两个问题要解决

一 在定义有元之前,也就是给特权之前,被给予特权的函数或者类要存在(A);

二 有特权的函数或者类——A,在定义的时候肯定要用给它特权的那个类(B类),甚至对B类对象的私有成员有操作,那么在这之前,B类也要存在。

所以这就要求

在B 定义给A特权之前——其实就是在B 中进行有元定义(friend void A:: funA()),要对A 进行声明(如果A类中的成员函数,那么这是必须的)。

但是A的定义要在B 类定义以后,这样可以保证,在A定义的时候,对 B 中对象的使用是有效的,B类是存在的。


在这有1点说明一下:

如果A 是类和一般的函数(不是类中的成员函数),可以不预先声明,在进行有元定义的时候已经达到声明的作用,可以像预先声明一样使用,但是我个人还是建议在进行有元定义之前进行声明或者类的定义。



	
				
		
原创粉丝点击