首页 > 其他分享 >静态数据成员

静态数据成员

时间:2023-04-27 22:56:21浏览次数:39  
标签:静态数据 友元 函数 成员 访问 static 数据

用关键字static声名

为该类所有对象共享

必须在类外定义和初始化

 

原理

1.同一类的不同对象,其成员数据之间是互相独立的。

2.当我们将类的某一个数据成员的声名为static,则油该类所生产的所有对象,其静态成员共享一个存储空间

 

static规定

1.static成员必须在类外定义并初始化

2.static数据成员和函数成员可以通过对象名引用也可以通过类名引用

3.static成员函数只能访问static数据成员,不能访问非static成员

4.普通成员函数可以访问static数据成员

 

静态数据成员

类外代码可以使用类名和作用域操作符来调用静态函数成员

静态函数成员只能引用属于该类的静态函数据成员或静态成员函数

 

类的友元

友元是C++提供的一种破坏数据封装和数据隐藏的机制

通过将一个模块声名为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息

可以使用友元函数和友元类

对象不能访问类的私有数据成员,但是友元类可以

 

友元

类的数据成员都设为私有的——良好的程序设计风格

如果外部函数需要直接访问类的数据成员:数据共有;友元。

 

友元函数

友元函数是在类声明中由friend修饰说明的非成员函数,在它的函数体中能够通过对象访问非成员函数,在它的函数体中能够通过对象名访问private和protected成员

作用:增加灵活性,使程序员可以在封装和隐藏性方面做合理选择

友元函数不是类的成员函数

但是可以访问类的私有数据成员

 

友元函数

类中私有和保护的成员在类外不能被访问。

友元函数是一种定义在类外部的普通函数,其特点是能够访问类中私有成员和保护成员,即类的访问权限的权限的限制对其不起作用。

友元函数不是成员函数,用法也与普通的函数不一致,只不过它能访问类中所有的数据。

 

友元函数的特点

友元函数近似于普通的函数,他不带有this指针,因此必须将对象名或对象的引用作为友元函数的参数,这样才能访问到对象的成员。

 

友元函数与一般函数的区别:
1.友元函数必须在类中声名,其函数体可在类内定义,也可在类外定义;

2.它可以访问该类中的所有成员(公有的、私有的和保护的),而一般函数只能访问类中的公有成员。

3.友元函数不是类的成员函数

 

标签:静态数据,友元,函数,成员,访问,static,数据
From: https://www.cnblogs.com/7777lcc/p/17360475.html

相关文章

  • java成员变量在堆_java的基本类型的成员变量在栈还是堆?
    转、:java成员变量在堆_java的基本类型的成员变量在栈还是堆? 先说结论,放在堆中只要是成员变量,所在的类被实例化,不管是不是基础类型都会放在堆中第一个结论就是错的基本数据类型是放在栈中还是放在堆中,这取决于基本类型声明的位置。第一种:在方法中声明的变量,即该变量是......
  • static成员变量 singleton
    99写入a5,再a5写入a0(返回地址)如果声明为返回类型为&,实际也一样......
  • [C#]中String、String[]、List<string>相互转换及string成员substring、split简单使用
    一、相互转换1.String>String[]Strings="a,b,c,d,e";String[]sArray=s.Split(',');2.String[]>Stringstring[]sArray={"a","b","c","d","e"};strings=String.Join(",......
  • NSDI 24 | 截稿在即,网络通信领域顶级会议,九名国内学者入围程序委员会成员!
    USENIXNSDI(SymposiumonNetworkSystemDesignandImplementation)是网络通信领域顶级会议,涉及网络通信领域的各方面内容。NSDI是CCFA类,H5指数65,ImpactScore10.80,在全球范围内享有盛誉。与网络领域的另一顶级学术会议SIGCOMM相比,NSDI更加侧重于网络系统的设计与实现,注重系统......
  • c++ CRTP 中判断 Derived 中有没有某个成员函数
    //省略HasMembertemplate<Dervied>classB{static_assert(HasMember<Derived>());}classA:publicB<A>{public:voidMember();}这样的代码是编译不过的,因为A还没有完全定义时,static_assert就会fail,但是将static_assert放到某个函数里是可以编译过的。......
  • C++——string 成员函数 length(),size() 和 C strlen() 的区别
    //方法一:调用length()或size()stringstrTest="test";strTest.length();//4strTest.size();//4//方法二:转为C风格字符串,调用strlen()strlen(strTest.c_str());//4注意:当string中含有空字符’\0’,使用 strlen()获取stri......
  • 3、复数类add成员函数
    如题,要求实现:1、复数类含两个参数的构造函数,一个为实部,一个为虚部2、实现Add()功能。3、Show出结果。#include<iostream>usingnamespacestd;classCmycomplex{private:intreal,imag;public:Cmycomplex(intr=0,inti=0);//构造函数设默认值,或者重载构造函......
  • 增加一个成员函数,计算加n秒的时间
    设置Cmytime类。具有三个成员函数Show()int Set(inth,intm,ints)对于Set函数的要求,   1、对于非法赋值不给予执行,三个参数合法范围是:0<=h<=23, 0<=m,s<=59。如何参数非法,本次Set函数不改变原有值。  2、赋值成功,返回1,否则返回0。void AddOneSecond();实......
  • 增加一个成员函数,计算加一秒的时间
    设置Cmytime类。具有三个成员函数Show()int Set(inth,intm,ints)对于Set函数的要求,   1、对于非法赋值不给予执行,三个参数合法范围是:0<=h<=23, 0<=m,s<=59。如何参数非法,本次Set函数不改变原有值。  2、赋值成功,返回1,否则返回0。void AddOneSecond();实......
  • C#基础 namespace 命名空间嵌套,各空间内成员相互独立
     .NETFramework:4.7.2       IDE:VisualStudioCommunity2019        OS:Windows10x64    typesetting:Markdown codeusingSystem;namespaceSpaceOuter{classStudent{publicintnum=0;}namespaceSpaceI......