龙空技术网

C++|构造、析构、成员(静态、非静态)函数、友元、全局函数

小智雅汇 317

前言:

此刻各位老铁们对“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-

标签: #java友元 #java友元类