静态成员,友元函数,友元类

Posted ᰔᩚ. 一怀明月ꦿ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态成员,友元函数,友元类相关的知识,希望对你有一定的参考价值。

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数C初学者入门训练题解CC的使用文章「初学」C++

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

🐰静态数据成员

🌸静态数据成员的声明:

🌸静态数据成员的初始化:

🌸静态数据成员的访问:

🐰静态成员函数

🌸静态成员函数的声明

🌸静态数据成员函数的访问

🐰友元函数

友元函数的声明

🐰 友元类


🐰静态数据成员

静态数据成员在内存中只占一份空间(而不是每个对象都分别为它保留一份空间) ,它是属于类的,但它被类的所有对象所共享,每个对象都可以访问这个静态数据成员。 若改变它的值,则在各对象中这个数据成员的值同时改变了, 静态数据成员系统单独为它开辟一段空间,不属于任何对象,程序结束空间才会被释放。

🌸静态数据成员的声明:

static 数据类型 变量名;

🌸静态数据成员的初始化:

静态数据成员的初始化, 静态数据成员的初始化一定在类外。
数据类型 类名::变量名=初值;
注意:不要在类的静态数据成员声明时进行初始化,一定要在类外初始化!!!,如果没有初始化静态数据成员,系统自动给它赋值为0.

🌸静态数据成员的访问:

(1)通过对象名进行访问
对象名.静态数据成员的变量名
(2)通过类名进行访问
类名::静态数据成员的变量名
注意:类的复合复制构造函数(默认的复制构造函数)并不能处理静态数据成员。需要自己提供的复制构造函数去处理静态数据成员

🐰静态成员函数

🌸静态成员函数的声明

静态成员函数的声明: 就是在普通的成员函数前面加一个static
static 返回类型 函数名(参数列表);

🌸静态数据成员函数的访问

类名::函数名()

对象.函数名()
注意: (1)静态成员函数与非静态的成员函数的根本区别: 非静态函数有this指针,而静态成员函数没有this指针,因而静态成员函数不能默认访问本类的非静态数据成员。 当调用一个对象的非静态的成员函数时,系统会把该对象的起始地址赋给成员函数的this指针。 (2) 静态成员函数可以直接访问静态数据成员 。在C++程序中静态成员函数主要是访问静态数据成员,不访问静态数据成员 例外: Student s1; int age ;int score ;age和score都是非静态的数据成员 static void print()     Cout<<s1.age<<s1.score<<endl; 在当前作用域是合法的。

🐰友元函数

友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但他可以访问该类对象的任何成员,包括私有成员、公有成员和保护成员。

友元函数的声明

友元函数的声明时,只要在声明语句的最前面加上关键字friend。  声明可以放在类的任何成员属性里(私有部分、公有部分和保护部分) 
friend 返回类型 函数名(类名 &引用名...)

friend void print(Student &temp); 
注意: (1)声明一个友元函数,就可以用这个函数直接访问该类的私有数据,从而提高了运行效率。 (2)友元函数提供了不同类的成员函数之间、类的成员函数与普通函数之间进行数据共享 (3)一个类的成员函数也可以作为另一个类的友元,一个类的成员函数作为另一个类的友元函数时,必须先定义这个类(作成员函数的类)

🐰 友元类

这种 友元类的说明方法是在另一个类声明中加入语句”friend 类名;” ,此语句可以放到公有部分,也可以放到私有部分或保护部分
class B

    ...
;
class A

    friend B;
    ...
;
这样B就是A的友元类,友元类B所有的成员函数都是A的友元函数,可以访问A类的对象中的任何成员。 关于友元,有以下注意: (1)友元函数的声明可以出现在类的任何地方,也就是说友元的声明不受成员访问符的限制 (2)友元关系是单向的不是双向的,如果声明了B类是A类的友元类,不一定A类是B类的友元类,A类的成员函数不一定能够访问B类中的成员 (3)友元关系是不能传递的,例如,如果说B类是A类的友元类,C类是B类的友元类,并不能说C类就是A类的友元类。

 

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸   

友元函数友元类.

友元能够理解为是类的“朋友”。它能够訪问类的保护和私有成员。友元的作用在于提高程序的执行效率,可是,它破坏了类的封装性和隐藏性。友元能够是一个函数,该函数被称为友元函数;友元也能够是一个类,该类被称为友元类。 

一、友元函数

友元函数是在类外定义的一个函数,不是类的成员函数。

这个函数能够是普通的C++函数,或者是其它类的成员函数。即普通友元函数和友元成员函数。友元函数是定义在类外部。但须要在类体内进行说明,为了与该类的成员函数加以差别。在说明时前面加以keywordfriend。友元函数能够訪问类中的保护和私有成员

注:友元函数仅仅是打破了类的訪问权限。但要訪问类成员还是须要依靠类对象进行,不能与类的继承混了。

二、友元函数的定义

普通友元函数的定义:

    friend  类型标识符  友元函数名(參数列表)。

友元成员函数(即将其他类的成员函数声明为该类的友元函数)的定义:

    friend  类型标识符  其它类名 ::  友元函数名(參数列表);

注:1、frinedkeyword仅仅须要在类声明时加。定义时不须要加。

2、能够将一个普通的全局函数声明为类的友元函数。也能够将还有一个类的成员函数声明为此类的友元。

如:friend void CStore::f2(int y); //在以引用其他类定义时,须要在本类定义前对其进行声明,如 class CStore;

三、友元函数与类之间的关系 

技术分享

详细实例:

youyuan1.cpp  //普通函数作为友元

友元类函数:

Class Cstudent;  //此处特别重要。Cstudent类在此之前并未声明。此句称为提前引用声明,目的是让编译器知道Cstudent类的名字已经登记在冊了。后面能够引用这个名字。

Class CTeacher

{

public:

      //教师的成员函数,改动某学生的成绩

      void ChangeGrades(Cstudent &s); 

private

}

void CTeacher ::ChangeGrades(Cstudent &s)

{      //友元成员函数訪问私有成员

        s. Grade[0]=78;

}

Class Cstudent

{

public: 

        //将教师类的成员函数说明为学生类的友元函数

        friend void CTeacher::ChangeGrades(Cstudent &s);  

private

        int Grade[3];

};

四、友元类

一、友元类

       一个类能够作还有一个类的友元称为友元类。

       当一个类作为还有一个类的时,意味着这个类的全部成员函数都是还有一个 

类的友元函数,能够訪问还有一个类的私有成员

 二、声明友元类的语法形式

      friend  class 类名;

比如:将A类声明为B类的友元类

Class  B

 {

……

    friend class A;      // 声明A为B的友元类

……

  }; 

注意:

友元关系不具有交换性,即是单向的;

友元关系不具有传递的。

以上是关于静态成员,友元函数,友元类的主要内容,如果未能解决你的问题,请参考以下文章

C++_友元函数与友元类

友元的友元类

友元函数都有哪些特点?

什么是友元?为什么要引入友元?解释友元函数和友元类

友元函数和友元类

C++中,啥叫友元函数?啥叫友元类?请举例说明。