首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++类的this指针,静态成员,友元函数友元类

---- 1. this指针 在上篇讲C++中类,对象,封装,继承(派生),多态的时候,this指针出现在成员函数中,并使用->成员提取符操作成员变量。...在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址,this 指针是所有成员函数的隐含参数,实际上成员函数默认第一个参数为T* const register this,this指针在成员函数的开始执行前构造的...友元函数友元类 所谓友元函数,就是在类中,用friend关键字声明一个函数,这个函数的声明在类中,但不作为类的成员函数,虽然友元函数不属于成员函数,却可以访问类中的成员,不论成员是public,pirvate...:在实现类之间数据共享时,减少系统开销,提高效率,具体来说:为了使其他类的成员函数直接访问该类的私有变量,同时也破坏了类的封装性,所以不到万不得已,还是不要用友元函数。...因为是需要友元来共享数据,那么大多数情况,友元函数都是有参数的, 因为友元函数没有this指针,则参数要有三种情况: 要访问非static成员时,需要对象做参数; 要访问static成员或全局变量时

1.5K10

C++面向对象友元,全局函数、类、成员函数做友元

在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术 友元的目的就是让一个函数或者类 访问另一个类中私有成员 友元的关键字为 ==friend== 友元的三种实现 全局函数做友元...类做友元 成员函数做友元 全局函数做友元 class Building { //告诉编译器 goodGay全局函数 是 Building类的好朋友,可以访问类中的私有内容 friend void...<< endl; cout 友正在访问" m_BedRoom 访问私有权限的原因是设置了该类与要访问的类的关系,要在被访问的类里写上 friend...告诉编译器 goodGay类是Building类的好朋友,可以访问到Building类中私有内容 可以设置类与类之间的访问权限 成员函数做友元 class Building; class goodGay...private: Building *building; }; class Building { //告诉编译器 goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容

39220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )

    文章目录 成员函数 常量函数 友元函数 new 创建对象 友元类 单例类 成员函数 ---- 此处继续上一篇博客继续向后讲解C++面向对象 类成员方法 , 除了定义构造方法与析构方法之外 ,...this->age; } 友元函数 ---- 外部访问类中的私有成员变量 , 有两种方法 , 一种是使用共有的成员方法访问 , 另一种是在友元函数中访问 ; 友元函数 , 在友元函数中 , 可以从类的外部访问类中的私有成员变量...() 构造方法 age : 88 ~Student() 析构方法 友元类 ---- 友元类 , 友元类中所有的成员函数都是该类的友元函数 , 可以访问该类对象的私有成员变量 ; 友元类声明 , 声明友元类方法...friend class 友元类名称; , 友元类中所有的成员函数都是该类的友元函数 ; Student.h 中友元类声明 //声明友元类 , 可以在友元类中访问修改类中的私有成员变量 //友元类中的所有的成员函数都是友元函数...friend class Teacher; 友元类定义与实现 , 友元类中定义的方法都是 Student 类的友元函数 , 其中需要传入 Student* 参数来访问 Student 对象的私有成员变量

    53120

    C++友元函数和友元类的使用

    1.友元介绍 在C++中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。...这样,在友元函数中可以直接访问该类的私有成员。 友元函数可以是非成员函数,也可以是其他类的成员函数。 友元函数通常在类的声明部分或声明外部使用 friend 关键字来声明。...当某个类需要提供特定函数或操作给其他类使用,但这些函数需要访问类的私有成员时,可以使用函数友元。 在重载运算符或实现某些特定功能时,友元可以提供对类私有成员的直接访问。...在C++中,我们使用类对数据进行了隐藏和封装,类的数据成员一般都定义为私有成员,成员函数一般都定义为公有的,以此提供类与外界的通讯接口。...但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。

    37540

    C++进阶之路:再谈构造函数、static成员、友元(类与对象_下篇)

    静态成员函数没有隐藏的this**指针**,不能访问任何非静态成员 静态成员也是类的成员,受public、protected、private 访问限定符的限制 【问题】 静态成员函数可以调用非静态成员函数吗...静态成员函数在没有实例化对象的情况下就可以被调用,它没有 this 指针,因此无法访问非静态成员函数或非静态成员变量。只有通过类的对象实例才能访问非静态成员函数。..._day; return _cin; } int main() { Date d; cin >> d; cout << d << endl; return 0; } 说明: 友元函数可访问类的私有和保护成员...,但不是类的成员函数 友元函数不能用const修饰 友元函数可以在类定义的任何地方声明,不受类访问限定符限制 一个函数可以是多个类的友元函数 友元函数的调用与普通函数的调用原理相同 友元类 友元类的所有成员函数都可以是另一个类的友元函数...注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元。

    8310

    C++笔记——类(0)定义、访问控制、友元、default、mutable、构造函数

    定义格式、访问控制 C++里面定义类的关键词有两个,一个是class,另一个是struct,他们基本没有区别,除了成员变量的默认属性。...,例如void xxx(); }; 在public修饰下的可以在整个程序内被访问,private只能够在类里面访问(上面的例子里private下只有成员变量,其实还可以有成员函数,如果是成员函数的话则只能被类里的其他成员函数调用...x, int y) { xPos = x; yPos = y; } 在使用类的成员函数的时候要记得加上类的名字,例如: point::setPoint(2, 3); friend,友元的魔法...所以如果希望用户能够调用这个函数,那么就要在友元声明之外再专门对函数进行一次声明(通常这种声明就放在定义类的头文件里面)。被声明为友元的函数可以访问类内部的private成员变量/函数。...当然,除了可以声明函数为友元,还可以声明类为友元,这里就不举例子了。 可变数据成员 有时候我们会希望能够修改类的某个用const修饰过的只读成员函数中的数据成员,例如,用来记录这个函数被调用了多少次。

    50620

    【C++】从入门到精通第三弹——友元函数与静态类成员

    友元 友元概述 友元是使用friend关键字, 让特定的函数或者别的类的所有成员函数对私有数据成员进行读写。 好处是:可以保持数据的私有性,又可以让特定的类或者函数直接访问私有成员。...为了提升效率,友元可以让普通函数直接访问一个类的保护或私有数据成员,但是如果没有友元机制,就只能将类的数据成员声明为公共的,从而任何函数都可以无约束地访问它。...Clibrary类的友元,所以这个成员函数就不能访问去访问Clibrary类中的私有属性。...此外,全局函数也可以作为类友元,一样可以访问类中的私有成员。 最后简单来谈一下 友元函数在访问类对象中的成员时,不需要通过对象名。...友元函数没有this指针,如果不通过对象名就无法找到类对象中的非static成员,也就无法访问。但是当访问类对象中的static成员时,就可以不用通过对象名访问。

    27910

    【C++】友元类 ( 友元类简介 | 友元类声明 | 友元类单向性 | 友元类继承性 | 友元类作用 | 友元类和友元函数由来 | Java 反射机制 | C C++ 编译过程 )

    一、友元类简介 1、友元类引入 在 C++ 语言中 , " 友元类 " 是 一个类 与 另外一个类 的 特殊类关系累 , 在 类 A 的 " 友元类 " B 中 , 可以直接访问 A 类 的 私有成员...和 受保护成员 ; B 是 A 的好朋友 , B 可以访问 A 的所有成员 ; 2、友元类声明 声明一个 类 B 是 另一个类 A 的 友元类 , 可以 在类 A 中使用 friend 关键字来声明 ;...B 是 A 的 友元类 ; B 类中定义 A 类型成员变量 ; B 可以访问 A 中的 所有成员 , 包括 私有成员 或 受保护成员 ; B 可以看做 A 的 数据操作辅助类 ; 代码示例 : class..., 但是 A 不是 B 的友元类 , A 不能访问 B 的私有和保护成员 ; 4、友元类继承性 友元类 关系不具有继承性 , 即 子类不能直接继承父类的友元类 ; 5、友元类作用 友元类主要作用 :...有些编程场景 , 需要破坏类的封装性 , 需要访问类的私有属性 ; Java 中给出的方案是 反射机制 ; C++ 中给出的方案是 友元函数 和 友元类 ; 2、Java 反射机制 Java 类编译成

    2.6K10

    【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的高级应用

    友元详解 在C++中,友元(friend)提供了一种突破类的访问限定符的机制,使得外部函数或其他类可以访问类的私有(private)和受保护的成员(protected)。...友元可以是友元函数或友元类,而这种友元关系是在类定义中通过关键字 friend 显式声明的。 4.1 友元的基本概念 友元函数:友元函数可以访问类的私有和受保护成员,但它并不是类的成员函数。...友元类:某个类的所有成员函数都可以是另一个类的友元,允许访问该类的私有和受保护成员。...虽然 func 是一个独立于类的外部函数,但通过友元声明,它获得了访问类的私有数据的权限。 4.3 友元类 友元类允许一个类的所有成员函数访问另一个类的私有和受保护成员。...友元类的成员函数并不需要逐一声明为友元,只要类被声明为友元,所有的成员函数都能访问另一个类的私有和受保护成员。

    19510

    类和对象下

    友元详解 在C++中,友元(friend)提供了一种突破类的访问限定符的机制,使得外部函数或其他类可以访问类的私有(private)和受保护的成员(protected)。...友元可以是友元函数或友元类,而这种友元关系是在类定义中通过关键字 friend 显式声明的。 4.1 友元的基本概念 友元函数:友元函数可以访问类的私有和受保护成员,但它并不是类的成员函数。...友元类:某个类的所有成员函数都可以是另一个类的友元,允许访问该类的私有和受保护成员。...友元类的成员函数并不需要逐一声明为友元,只要类被声明为友元,所有的成员函数都能访问另一个类的私有和受保护成员。...这种情况下,友元机制简化了类与类之间的合作,不必通过公共接口访问私有数据,减少了不必要的代码冗余。 总结 友元机制在C++中提供了一种打破类封装的方式,允许外部函数或类访问类的私有和受保护成员。

    8010

    【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的讲解

    友元 在C++中,友元(friend)提供了一种突破类的访问限定符的机制,使得外部函数或其他类可以访问类的私有(private)和受保护的成员(protected)。...4.1 友元涉及的基本概念 友元函数:友元函数可以访问类的私有和受保护成员,但它并不是类的成员函数。...友元类:某个类的所有成员函数都可以是另一个类的友元,允许访问该类的私有和受保护成员。...友元类的成员函数并不需要逐一声明为友元,只要类被声明为友元,所有的成员函数都能访问另一个类的私有和受保护成员。...这种情况下,友元机制简化了类与类之间的合作,不必通过公共接口访问私有数据,减少了不必要的代码冗。 总结 友元机制在C++中提供了一种打破类封装的方式,允许外部函数或类访问类的私有和受保护成员。

    7200

    【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)

    实际上,继承方式与访问限定符共同决定了派生类访问基类成员的权限: 对于继承方式,需要注意以下几点: 1. 无论以什么方式继承,基类的私有成员在派生类当中都是无法访问的。...这里的“无法访问”并不是指基类私有成员没有继承到派生类当中,而是语法限制导致不能访问。 2. 如果想要基类成员在派生类当中可以访问,而在类外无法访问,就将其设置为保护成员。 3....那么我们是否可以利用这一规则,来实现一个不能被继承的类呢? 方法1:将基类的构造函数设置为私有成员,那么派生类就无法调用基类的构造函数,无法实例化出对象。...方法2:使用c++11新关键字final,限制该类不能被继承: class A final 六、继承与友元 基类的友元不能访问派生类的私有和保护成员。 也就是说,友元关系不能被继承。...举个例子: #include using namespace std; class B;//这里需要进行声明,否则友元函数无法识别类B class A { friend void

    24810

    类和对象(下)

    • 外部友元函数可访问类的私有和保护成员,友元函数仅仅是⼀种声明,他不是类的成员函数。 • 友元函数可以在类定义的任何地方声明,不受类访问限定符限制。 • ⼀个函数可以是多个类的友元函数。...• 友元类中的成员函数都可以是另⼀个类的友元函数,都可以访问另⼀个类中的私有和保护成员。 • 友元类的关系是单向的,不具有交换性,⽐如A类是B类的友元,但是B类不是A类的友元。...友元函数(Friend Function) 友元函数是一个不是类成员的函数,但它可以访问该类的所有私有成员和保护成员。要定义友元函数,可以在类定义中使用 friend 关键字声明。...尽管 x 是私有成员,但友元函数可以访问它。 2. 友元类(Friend Class) 友元类允许一个类访问另一个类的所有私有和保护成员。...总结: 友元函数:允许非成员函数访问类的私有成员。 友元类:允许另一个类访问当前类的所有成员。 友元成员函数:允许特定的成员函数访问类的私有成员。

    7410

    【C++】泛型编程 ⑬ ( 类模板示例 - 数组类模板 | 构造函数和析构函数 的 声明与实现 | 普通成员函数 的 声明与实现 | 外部友元函数 的 声明与实现 )

    析构函数 : 在 类模板 外部 访问 类模板 中声明的 函数 , 先显示声明 模板类型 template , 然后在下面使用 域作用符 访问 类模板中的 函数 , 域作用符...cout 函数 " << endl; } 3、普通成员函数 的 声明与实现 重载 数组下标 [] 操作符 , 使用 类模板内部 的 成员函数即可完成 ; 普通成员函数 的 声明 : 数组下标...Array::operator[](int i) { return m_space[i]; } 4、外部友元函数 的 声明与实现 重载 左移 的 做操作数是..., 类模板内部定义的 操作符重载函数 , 其 左操作数 必须是 类本身 ; 外部友元函数 的 声明 : 声明时 , 需要在 函数名 和 参数列表之间 注明 泛型类型 ; 实现时 , 不能在 函数名...Array& a); } 外部友元函数 的 实现 : 在外部 实现 类模板的 友元函数 , 首先 , 还是注明 模板类型 , template ; 然后 , 在 函数参数 /

    52010

    【细品C++】类和对象的一些细节(初始化列表、友元、static成员等)

    date d; cin >> d; cout << d << endl; //两个操作符重载返回istream/ostream引用是为了能链式调用 return 0; } 运行截图: 说明: 友元函数可访问类的私有和保护成员...友元函数不能用const修饰。 友元函数可以在类定义的任何地方声明,不受访问限定符限制。...一个函数可以是多个类的友元函数 友元函数的调用与普通函数的调用原理相同 友元类 友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。...如上面代码的date类和Time类,在Time类中声明date类为其友元类,那么可以在date类中直接访问Time类的私有成员,但无法在Time类中访问date类的私有成员。...外部类对内部类没有任何优越的访问权限。 注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象来访问外部类中的所有成员。但是外部类不是内部类的友元。

    47420

    剖析【C++】——类和对象(下篇)——超详解——小白篇

    友元 友元提供了一种特殊的机制,可以让一个类允许另一个类或函数访问其私有或受保护的成员。虽然友元增加了便利性,但也会破坏封装性,增加代码耦合度,因此使用时需谨慎。...友元函数的特点: 可以访问类的私有和保护成员,但不属于类的成员函数。 不能用 const 修饰。 可以在类定义的任何地方声明,不受类访问限定符限制。 一个函数可以是多个类的友元函数。...3.2 友元类 友元类是一种类的所有成员函数都可以访问另一个类的私有和保护成员的机制。 特点: 友元关系是单向的,不具有交换性。...Time 类的友元类,因此 Date 类的成员函数可以访问 Time 类的私有成员。...3.3总结: 友元函数和友元类允许访问私有和保护成员,但要谨慎使用,因为这会增加代码的耦合性。 友元关系是单向的,不可传递。 使用友元可以解决一些特殊情况下的访问权限问题,如重载运算符等。 4.

    7510

    类和对象:C++11新特性与知识补充

    ⾮静态的,因为没有this指针; ⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数; 静态成员也是类的成员,受public、protected、private访问限定符的限制; 静态成员变量不能在声明位置给缺省值初始化...(四)友元 友元在 C++ 编程中提供了一种突破类的封装机制,允许非成员函数或其他类访问类的私有和保护成员。友元包括友元函数和友元类,友元函数和友元类可以访问类的私有和保护成员。...友元函数 定义与作用 友元函数是一种特殊的非成员函数,可以通过友元函数访问类的私有和保护成员 在类内使用friend关键字声明友元函数 特点 友元函数只是声明,所以可以在类的定义的任何地方声明,不受类的访问限定符的限制..._b1 << endl; } int main() { A aa; B bb; func(aa, bb); return 0; } 友元类 定义与作用 友元类是一个类的所有成员函数都可以访问另一个类的私有和保护成员...内部类是⼀个独⽴的类,只是受外部类类域限制和访问限定符限制,所以外部类在定义对象的时候,其中不包括内部类。 内部类默认是外部类的友元类,可以使用外部类的成员。

    9810

    那些你不知道的类和对象的知识

    静态成员也是类的成员,受public、protected、private 访问限定符的限制 静态成员变量和静态成员函数的主要用途包括: 对象计数器:可以使用静态成员变量来实现某个类的对象的计数功能。...,不能访问类中的私有成员和保护成员,但是友元函数却可以,一个特殊的存在,由于这样操作破坏了类的封装性,我们建议少使用友元....小结: 友元函数可访问类的私有(private)和保护(protect)成员,但友元函数不属于类,不是类的成员函数....友元函数的调用与普通函数的调用原理相同 (2)友元类 前面介绍了友元函数,那类也可以是类的友元. 友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。...则可以在Date类中直接访问Time类的私有成员变量,但是在Time类中是无法访问Date类中的私有成员的. 友元关系不能传递. 如果B是A的友元,C是B的友元,则不能说明C时A的友元.就比如.

    20520

    C++一分钟之-成员访问控制:public, private, protected

    在C++中,成员访问控制是面向对象编程的核心概念之一,它通过public、private、protected这三个关键字来限定类成员的可见性和可访问性。...用途:通常用于类的接口部分,如成员函数和需要外部直接操作的数据成员。 private(私有) 含义:私有的,仅在类内部可访问。 用途:隐藏实现细节,保护数据安全,实现封装。...protected(受保护) 含义:介于public和private之间,基类的protected成员在派生类中可访问,但外界无法直接访问。...使用友元函数或友元类过度破坏封装 问题:为了方便访问私有成员而随意声明友元,降低了类的封装性。 避免:谨慎使用友元功能,仅在确实需要且无其他更好方案时才考虑,确保类的设计依然保持良好的封装性。...public函数间接访问protected成员 return 0; } 小结 成员访问控制是C++面向对象编程中维护数据安全和实现封装的重要机制。

    66210
    领券