美文网首页
C++中的成员变量和成员函数

C++中的成员变量和成员函数

作者: chenkangcrack | 来源:发表于2015-10-07 23:21 被阅读1433次

    C++中的类有两个成分:

    (1)成员变量

    成员变量按照作用域分为静态成员变量和非静态成员变量,C++中成员变量的默认控制符是private,这点与Java不太一样。;按照控制符又可以分为public, private, protected;

    静态成员变量本质上只是说明了该变量的持续性和作用域,而不是定义

    静态成员变量不能重复定义,故静态成员变量不能在类中或者构造函数中初始化,因为对象创建的时候会执行一次;静态成员变量一般在类的外部进行初始化,并且要放在所有代码块之外(全局作用域)。如果静态成员变量是const类型则可以在类定义中初始化。

    静态成员变量的初始化格式 type class::variable=value;

    非静态成员变量在对象创建时(分配内存)才被定义,并由构造函数初始化

    (2)成员函数

    C++中的成员函数定义的位置有两种:

    (1)定义在类中

    优点:简单方便明了

    缺点:类定义包含类实现,可定制性差

    (2)定义在类外

    优点:可定制性好

    缺点:每次定义的时候要加上类名class:: class_function(){}

    同样的,按照作用域来分,有静态成员函数和非晶态成员函数,按照控制符来分,有public, private, protected

    静态成员函数在类没有定义前就可以使用,故静态成员函数无法访问非静态成员变量,它只能访问静态成员函数内部定义的变量或者静态成员变量

    Java中的类是可以访问私有成员变量的;

    静态成员函数要想访问私有成员变量,有两种方案:

    方案一:将所有访问的数据都定义成静态成员变量;

    方案二

    class a

     { 

    public:  static FunctionA(a* _a) 

        {    a-> menber = 1;  }  

        private:  int menber; 

    }

    静态成员函数与非静态成员函数的根本区别是:非静态成员函数有 this 指针,而静态成员函数没有 this 指针。由此决定了静态成员函数不能访问本类中的非静态成员

    注:友元

    成员函数是属于类的,而类中的私有成员变量只有成员函数才能访问,非成员函数想访问私有成员函数,可以在函数定义前加上friend。成员函数的调用形式是

    class A{};

    A a;

    a.function();

    非成员函数可以直接调用;

    在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。为了解决上述问题,提出一种使用友元的方案。友元是一种定义在类外部的普通函数,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性使得非成员函数可以访问类的私有成员

    注:Java与C++中关于static的区别与联系

    java中的“static”和C++中的“static”含义并不完全一样!!!C++中的关键字static被复写了三次,有三种含义,分别为:

    1:变量一直存在

    2:不能被其他文件访问的全局变量和函数

    3:属于类且不属于对象的全局变量和函数

    在一大部分人心中可能只把它理解为“静态”的意思,实际上Java仅仅取了C++中static的最后一个含义:即,不与类的实例相关联,仅与类相关联。

    相关文章

      网友评论

          本文标题:C++中的成员变量和成员函数

          本文链接:https://www.haomeiwen.com/subject/fabifttx.html