前言:
此刻各位老铁们对“java友元”大约比较着重,大家都想要了解一些“java友元”的相关资讯。那么小编同时在网络上收集了一些有关“java友元””的相关资讯,希望小伙伴们能喜欢,小伙伴们快快来学习一下吧!C++是一个多编程范式的编程语言,支持以函数为基本组件的面向过程的编程范式,也支持以类为基本构件的面向对象的编程范式。由此,其支持的函数类型也可以区分为与类相关的构造、析构、成员(静态、非静态)函数,以及全局函数(内部链接或外部链接),同时也支持友元函数。(与Java要求所有代码写在类内,所有数据和代码要隶属于不同的类不同,C++可以定义全局函数和全局变量(外部变量))
直接看实例和注释:
/* 构造、析构、成员(静态、非静态)函数、友元、全局函数non_static member function: 有隐藏的this指针(指向对象数据成员的起始地址) static member function: 没有this指针(所以不能访问non_static的成员数据),有类作用域 friend function: 有权限可以额外访问声明其为友元的类的私有成员 statci global function: internal linkage,otherwise, external linkage constructor: initializing data member; destructor: free or close resource*/#include <stdio.h>class Demo{public: Demo(double a,double b):ci(a)// 构造函数 { pv = b; de = new double(99.99); } friend double ff(Demo &d); // 友元函数声明 static double sf(double r) // static member function,没有隐含的this指针 { return r*r*PI; //return r*r*pv; // static member function can't access non-static member } double mf(double r) // non_static member function,隐含this指针 { return 2*r*pv+PI-PI; } ~Demo(){delete de;} // 析构函数,如果有资源占用需要释放,如free()、fclose() Demo(const Demo& d):ci(d.ci) // 复制构造函数 { pv = d.pv; de = new double(99.98); } Demo& operator=(const Demo& d) // 赋值运算符重载 { if(this != &d) { pv = d.pv; delete de; de = new double(99.89); } return *this; } double getci() const { return ci; } Demo operator++(int) { Demo d = *this; pv = pv + 1; return d; } static double PI;// 静态数据成员在类外初始化,表明其仅一份,与对象无关,但可为对象使用private: double pv; const double ci; // const成员需使用初始化列表初始化 double *de; // point to heap memory block};double Demo::PI=3.1415926; // static成员类外初始化 double ff(Demo &d) // 友元函数定义{ Demo e(5,6); return d.pv+e.pv;}static double gf(Demo d) // 全局函数定义,static表示internal linkage//static double gf(Demo &d) // 对于有指针成员的类,如果没有复制构造函数,则不能是值传递{ static double sv = d.mf(3); sv += 2*2*d.PI;// sv += d.pv // error,static function can't access non-static member return sv;}const int g_var = 89; // 默认为internal linkageint main(){ Demo d(4,5); double sum = g_var; sum += d.sf(3); sum += Demo::sf(3); sum += d.mf(3); sum += ff(d); sum += gf(d); printf("%lf\n",sum); Demo e = d; e++; printf("%lf\n",e.getci()); getchar(); return 0;}
类是对数据的再次分类或数据类型的自定义,是一种不同于面向过程的代码组织方式和编程思想,是对数据和函数的封装,提供了访问控制的安全机制,也提供了类名的命名空间和作用域。同时,也为非静态成员函数提供了隐含的this指针。当然,类的继承性和多态代码重用和扩展的一种重要手段。
-End-
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。