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

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

前言 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 点赞、收藏与分享:觉得这篇文章对你有帮助!...示例:友元函数访问两个类的私有成员 #include using namespace std; // 前置声明,避免类A的友元函数不识别类B class B; class A...5.3 封装与访问权限 内部类作为外部类的一部分,可以被放置在 private 或 protected 访问区域中,这样可以控制内部类的可见性。...这是一种封装技术,用于使 Task 类专属于 Manager 类,外部无法创建 Task 对象,只能通过 Manager 类的方法来间接使用它。...6.1 匿名对象的基本概念 匿名对象的定义:匿名对象是通过直接调用构造函数创建的对象,而没有为其指定名字。形式上,它看起来像 A() 或 A(1) 这样的表达式。

7500

C#2.0新增功能01 分部类与分部方法

分部类型   拆分一个类、一个结构、一个接口或一个方法的定义到两个或更多的文件中, 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来。...Visual Studio 在创建Windows 窗体、Web 服务包装器代码等时会使用这种方法。 你可以创建使用这些类的代码,这样就不需要修改由Visual Studio生成的文件。...各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。 在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。 最终类型是所有部分在编译时的组合。...partial 修饰符不可用于委托或枚举声明中。 下面的示例演示嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。...下面用于分部类型定义中的关键字是可选的,但是如果某关键字出现在一个分部类型定义中,则该关键字不能与在同一类型的其他分部定义中指定的关键字冲突: public 专用 受保护 internal

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

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

    C++类和对象——全面指南 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 点赞、收藏与分享:觉得这篇文章对你有帮助吗?...示例代码:友元函数访问两个类的私有成员 #include using namespace std; // 前置声明,避免类A的友元函数不识别类B class B; class A...5.3 封装与访问权限 内部类作为外部类的一部分,可以被放置在 private 或 protected 访问区域中,这样可以控制内部类的可见性。...这是一种封装技术,用于使 Task 类专属于 Manager 类,外部无法创建 Task 对象,只能通过 Manager 类的方法来间接使用它。...6.1 匿名对象的基本概念 匿名对象的定义:匿名对象是通过直接调用构造函数创建的对象,而没有为其指定名字。形式上,它看起来像 A() 或 A(1) 这样的表达式。

    19610

    【C++指南】类和对象(九):内部类

    内部类访问外部类的普通成员,需要借助外部类对象(否则无法得知访问的是哪一个对象的) 例如: #include using namespace std; class A...外部类对内部类没有任何优越的访问权限。 内部类在定义它的外围类的作用域内是可见的,但在外围类外部是不可见的。...假如内部类受外部类公有限定符限制,需要通过外部类限定符限定的方式创建内部类对象 假如内部类是受外部私有或保护限定符限制,那么在类外无法创建内部类的对象(如果你不想外部可以创建内部类的对象,就可以这么做)...外部类无法访问内部类的私有成员 #include using namespace std; class A { private: static int _k; int...避免命名冲突:通过内部类,可以避免不同命名空间或类中的命名冲突。 访问权限控制:内部类可以更好地控制对特定成员或方法的访问权限。

    11610

    类和对象下

    示例代码:友元函数访问两个类的私有成员 #include using namespace std; // 前置声明,避免类A的友元函数不识别类B class B; class A...在C++中,内部类和外部类是独立的类,尽管它们之间有一定的联系,但内部类不属于外部类的对象,它有自己的内存布局和独立性。使用内部类通常是为了封装和简化类之间的关联。...5.3 封装与访问权限 内部类作为外部类的一部分,可以被放置在 private 或 protected 访问区域中,这样可以控制内部类的可见性。...这是一种封装技术,用于使 Task 类专属于 Manager 类,外部无法创建 Task 对象,只能通过 Manager 类的方法来间接使用它。...6.1 匿名对象的基本概念 匿名对象的定义:匿名对象是通过直接调用构造函数创建的对象,而没有为其指定名字。形式上,它看起来像 A() 或 A(1) 这样的表达式。

    8010

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

    访问静态成员:静态成员可以通过类名::静态成员或对象.静态成员访问。 静态成员函数没有this指针:不能访问任何非静态成员。...内部类 1.概念 内部类 是指定义在另一个类内部的类。它是一个独立的类,不属于外部类,不能通过外部类的对象访问其成员。...简单理解:就像一家大公司的部门(内部类)和公司(外部类),部门是独立的,但仍然是公司的一部分,外部类对内部类没有特别的访问权限。...2.特性 内部类的位置:内部类可以定义在外部类的 public、protected 或 private 区域。 访问外部类的静态成员:内部类可以直接访问外部类的静态成员,而不需要外部类的对象或类名。...3.总结 内部类 是独立的类,可以定义在外部类的任何访问区域。 内部类可以直接访问外部类的静态成员,不需要外部类的对象或类名。 内部类可以通过外部类的对象参数访问外部类的非静态成员。

    7510

    C++类与对象(三)

    ,每个"成员变量"后面跟一个放在括号中的初始值或表达式。...友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。...内部类(类中类) 概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类, 它不属于外部类,更不能通过外部类的对象去访问内部类的成员。...外部类对内部类没有任何优越 的访问权限。 注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访 问外部类中的所有成员。但是外部类不是内部类的友元。...sizeof(外部类)=外部类,和内部类没有任何关系。

    39000

    类与对象下篇

    ,不属于任何类,但需要早类的内部声明,声明时需要加friend关键字。...内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。...2.内部类虽然定义在类的里面,但完全是两个独立的类,和定义在类外面没有区别,真正的影响点是B类的访问受A的类域和访问限定符的限制,内部类受访问限定符的限制,如果一个内部类被设置成私有,那么main函数无法访问...3.sizeof(外部类) = 外部类,和内部类没有任何关系。...return n; } }; int main() { A aa1; // 不能这么定义对象,因为编译器无法识别下面是一个函数声明,还是对象定义 //A aa1(); // 但是我们可以这么定义匿名对象

    44830

    第19次文章:类加载器的加密解密+内部类

    ,属于将输入文件的每个字节转化为二进制数,然后和十六进制数0xff进行异或操作,最后输出得到一个被取反的新的class文件。...tips:根据提示信息,主要报错的原因在于,当前加密后的class文件属于文件系统类加载器无法识别的类信息。...三、内部类的介绍 由于内部类的相关内容主要是用法上的介绍,学习代码主要以语法测试为主,不具有任何实际意义,所以在此处我们不放入相关代码。...1、内部类 嵌套类 静态内部类 非静态内部类 -普通内部类(也称为:成员内部类):在一个类(外部类)中直接定义的内部类 -匿名内部类 -方法内部类:在一个方法(外部类的方法)或代码块中定义的内部类 注意...-在不相关类中,可以直接创建静态内部类的对象(不需要通过所在外部类) -静态内部类实际上和外部类联系很少,也就是命名空间上的联系。

    81930

    你知道匿名内部类、Lambda表达式为嘛只能使用外部final的变量吗?

    innerAdd() { return x + y; } } private int x = 100; } 附内存结构图: 匿名内部类的例子如下...,因为程序的运行由外而内的,所以外部根本无法确定内部这时到底有没有这个东西。...当然还有关于变量生命周期的阐述,以后会再给出详解~ 顺便插一句:如果用final修饰方法,您将获取至少如下两个好处(所以建议咱们的serviceImpl都可以final化): 方法锁定,防止任何子类修改其含义和语意...其实这里并不是这样的,因为你new出来的A对象是两个,然后这个c是成员变量属于对象的,所以地址值是不一样的,所以根本就不是同一个,谈何不变呢?...使用场景 匿名内部类的使用也是非常非常多的,所以理解为什么,能够更好的使用内部类,从而可以更优美的去规划自己的代码结构 总结 任何一向规定、规范都不是凭空制定而且也不可能随便下定义的。

    1.2K70

    【小家java】匿名内部类为什么只能使用外部final的变量

    因为Java通过类的封装规范了类与类之间的访问权限,而内部类却打破了这种规范,它可以直接访问自身所在的外部类里私有成员,而且自身还可以创建相同的成员,从作用域角度看,内部类的新成员修改了什么值,外部方法也是不知道...,因为程序的运行由外而内的,所以外部根本无法确定内部这时到底有没有这个东西。...当然还有关于变量生命周期的阐述,以后会再给出详解 顺便插一句:如果用final修饰方法,您将获取至少如下两个好处(所以建议咱们的serviceImpl都可以final化): 1、方法锁定,防止任何子类修改其含义和语意...其实这里并不是这样的,因为你new出来的A对象是两个,然后这个c是成员变量属于对象的,所以地址值是不一样的,所以根本就不是同一个,谈何不变呢?...3、使用场景 匿名内部类的使用也是非常非常多的,所以理解为什么,能够更好的使用内部类,从而可以更优美的去规划自己的代码结构 4、最后 任何一向规定、规范都不是凭空制定而且也不可能随便下定义的。

    92440

    】 看一看二者的类有多像?

    枚举和注解类型分别是特殊类型的类和接口,因此在本课中通常将类型简称为类和接口。 根据这里的概念,Package基本上是对应C#的NameSpace的。...C#中觉得较长不美观可以在using的时候设置别名: using entityPig = cn.flylolo.entity.Pig; 在代码中可以直接使用别名引用。...则OuterClass可以直接调用NestedStaticClass,而上例中的Main方法则无法调用NestedStaticClass了。...6.3 非静态内部类总结 外部类都无法访问内部类的的方法和属性,但Java的内部类可以访问外部类的方法和属性,C#的不可以,Java内外部类互相访问提供了“.New”和“.this"关键字。...除了上述的内部类定义方式,Java的内部类可以出现在外部类的方法、语句块中。 6.4 静态内部类总结 C#的静态类中不允许有非静态方法和成员属性,Java的静态内部类中可以有。

    55910

    C#上位机开发(二)—— Hello,World

    框架是指.net框架,4以及4以下的.NET框架可以在xp上运行,4以上可以在win7/8/10上运行,鉴于当前大多数操作系统都是win7或win10,选择4.5版本。...; 7 using System.Drawing; 8 using System.Linq; 9 using System.Text; 10 using System.Windows.Forms;...,比如在这个工程中定义了一个名称为Form1的公共类,并且在定义类的同时创建了一个这个类的对象,名为Form; 方法:前面已经说过,在面向对象编程中是没有变量和函数的,所有的函数都被封装在类中,属于对象的方法...最关键的一点,这里类也是用partial关键字修饰的,可以看到,Partial是局部类型的意思,允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中,用partial定义的类可以在多个地方被定义...窗体设计器生成的代码 26 27 /// 28 /// 设计器支持所需的方法 - 不要修改 29 /// 使用代码编辑器修改此方法的内容

    2K41

    上位机开发二----第一个程序hallo world

    框架是指.net框架,4以及4以下的.NET框架可以在xp上运行,4以上可以在win7/8/10上运行,鉴于当前大多数操作系统都是win7或win10,选择4.5版本。...; 7 using System.Drawing; 8 using System.Linq; 9 using System.Text; 10 using System.Windows.Forms;...,比如在这个工程中定义了一个名称为Form1的公共类,并且在定义类的同时创建了一个这个类的对象,名为Form; 方法:前面已经说过,在面向对象编程中是没有变量和函数的,所有的函数都被封装在类中,属于对象的方法...最关键的一点,这里类也是用partial关键字修饰的,可以看到,Partial是局部类型的意思,允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中,用partial定义的类可以在多个地方被定义...窗体设计器生成的代码 26 27 /// 28 /// 设计器支持所需的方法 - 不要修改 29 /// 使用代码编辑器修改此方法的内容

    82842

    【C++类和对象】探索static成员、友元以及内部类

    我们如果使用普通的成员变量来统计,在每次创建对象时就创建一个属于该对象的变量,每次该变量都会被初始化,无法计算,所以我们就可以通过静态成员变量来统计,它是类的所有实例共享的变量,并不会每个对象都创建一个...2.友元(friend) 友元(friend)是C++中的一个特殊关键字,用于在类中声明其他类或函数为友元。友元类或函数可以访问声明它为友元的类的私有成员和保护成员。...该函数可以访问声明它为友元的类的私有成员和保护成员。 友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。...内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。...sizeof(外部类)=外部类,和内部类没有任何关系。

    14210

    类和对象(3)

    静态成员函数属于类本身,而非类的某个特定对象。非静态成员函数则依赖于类的特定实例,由于静态成员函数没有this指针,因此它无法访问类的非静态成员,因为这些非静态成员需要this指针来访问。 2....非静态成员函数可以调用类的静态成员函数吗?  可以。静态成员函数属于类本身,而非类的某个特定对象。非静态成员函数则依赖于类的特定实例,所以它们可以在没有任何对象实例的情况下被调用。...友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。...内部类是一个独立的类, 它不属于外部类,更不能通过外部类的对象去访问内部类的成员。 外部类对内部类没有任何优越的访问权限。...匿名对象 int main() { A aa1; // 不能这么定义对象,因为编译器无法识别下面是一个函数声明,还是对象定义 //A aa1(); // 但是我们可以这么定义匿名对象,匿名对象的特点不用取名字

    6110

    【C++】类与对象——友元,内部类,匿名对象

    总结一下: 友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。...友元声明只能出现在类定义的内部,但是类内出现的具体位置不限。友元不是类的成员也不受它所在区域访问控制级别的约束。一般来说,最好在类定义开始或结束区域集中声明友元。...内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。...sizeof(外部类)=外部类,和内部类没有任何关系。 举例: 可以把友元实现的打印日期形成内部类,也可以做到相同效果。...return n; } }; int main() { A aa1; // 不能这么定义对象,因为编译器无法识别下面是一个函数声明,还是对象定义 //A aa1(); // 但是我们可以这么定义匿名对象

    10810

    C++第六弹 -- 类与对象下篇(初始化列表 Static成员 友元 内部类 匿名对象)

    初始化列表 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。...,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。...内部类 概念:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。...sizeof(外部类)=外部类,和内部类没有任何关系。...友元是打破封装的一种机制,它允许一个类访问另一个类的私有成员。友元可以是函数或类,友元关系是单向的,不能继承和传递。

    10110
    领券