当前位置: 首页 > news >正文

做3d效果图有什么好网站b2b外贸平台

做3d效果图有什么好网站,b2b外贸平台,js 取网站域名,商丘软件开发一、引言 在C中,友元函数(Friend Function)是一个独特而强大的特性,它打破了类的封装性,允许一个或多个非成员函数访问类的私有(private)和保护(protected)成员。尽管这…

一、引言

在C++中,友元函数(Friend Function)是一个独特而强大的特性,它打破了类的封装性,允许一个或多个非成员函数访问类的私有(private)和保护(protected)成员。尽管这种特性在某些情况下可能引发争议,因为它违反了面向对象编程中的封装原则,但在需要高效访问类内部状态或实现某些特定设计时,友元函数却又非常适用。

1.1 封装与友元函数的关系

在面向对象编程(OOP)中,封装是一种将数据(属性)与操作这些数据的函数(方法)绑定在一起的方法。封装的主要目的是隐藏类的内部实现细节,只对外提供有限的接口供外部使用。然而,在某些情况下,我们可能希望允许某些特定的非成员函数访问类的私有成员。这时,友元函数就显得尤为重要了。

1.2 友元函数的概念

友元函数不是类的成员函数,但它可以访问类的所有私有(private)和保护(protected)成员。要使一个函数成为类的友元,需要在类定义中声明该函数为友元。友元函数可以是普通函数,也可以是其他类的成员函数。

二、友元函数的定义与使用

2.1 定义友元函数

在类定义中,使用friend关键字可以声明一个或多个友元函数。友元函数的声明可以放在类的任何位置(但通常放在类定义的开始部分),但它们的定义(实现)必须在类定义之外进行。

示例:

#include <iostream>  class MyClass {  
private:  int value;  public:  MyClass(int val) : value(val) {}  // 声明友元函数  friend void printValue(const MyClass& obj);  
};  // 定义友元函数  
void printValue(const MyClass& obj) {  std::cout << "Value: " << obj.value << std::endl;  
}  int main() {  MyClass myObj(10);  printValue(myObj); // 输出: Value: 10  return 0;  
}

在上面的示例中,printValue函数被声明为MyClass的友元函数,因此它可以访问MyClass对象的私有成员value。

2.2 友元函数的特性

非成员函数:友元函数不是类的成员函数,因此它不会隐式地接收类的this指针。
访问权限:友元函数可以访问类的所有成员,包括私有和保护成员。
作用域:友元函数的作用域不是类的作用域,而是定义它的作用域。但是,它可以通过类的对象来访问类的成员。
数量不限:一个类可以有任意数量的友元函数。
不继承:友元关系不是继承的。如果类B是类A的友元,那么类B的子类不会自动成为类A的友元。

2.3 友元成员函数

除了普通函数外,类的成员函数也可以被声明为其他类的友元函数。这允许一个类的成员函数访问另一个类的私有成员。

示例:

#include <iostream>  class MyClassB; // 前向声明  class MyClassA {  
private:  int value;  public:  MyClassA(int val) : value(val) {}  // 声明MyClassB的成员函数为友元  friend void MyClassB::printValue(const MyClassA& obj);  
};  class MyClassB {  
public:  void printValue(const MyClassA& obj) {  std::cout << "Value from MyClassA: " << obj.value << std::endl;  }  
};  int main() {  MyClassA myObjA(20);  MyClassB myObjB;  myObjB.printValue(myObjA); // 输出: Value from MyClassA: 20  return 0;  
}

注意,在声明友元成员函数时,需要先对目标类进行前向声明,因为编译器在解析MyClassA的类定义时需要知道MyClassB是一个类名。

三、友元函数的使用场景

3.1. 重载操作符

友元函数最常见的用途之一是用于重载操作符,特别是当操作符需要访问类的私有或保护成员时。例如,在自定义的复数类(Complex)中,你可能想要重载<<操作符以便能够直接将复数对象输出到流中。由于输出操作需要访问复数对象的实部和虚部(这些通常是私有成员),因此将<<操作符定义为复数类的友元函数是一个很好的选择。

3.2. 辅助函数

有时,我们可能需要一些辅助函数来帮助实现类的功能,但这些函数并不适合作为类的成员函数。例如,如果有一个表示二维图形的类(如圆形或矩形),我们可能需要一个函数来计算两个图形是否相交。这样的函数可能需要访问图形的私有成员(如中心坐标和半径或边界),但将这些功能作为类的成员函数可能并不合适,因为它们并不是图形对象本身的操作。这时,可以将这些辅助函数声明为类的友元函数。

3.3. 模板类中的友元

在模板类中,友元函数的使用变得更加复杂但也更加有用。模板类的友元可以是另一个模板类或非模板类,甚至可以是模板函数。这允许模板类与非模板代码或不同类型的模板代码之间进行更紧密的交互。例如,你可能有一个模板容器类,并希望提供一个模板化的友元函数来执行某种类型的算法,这个算法需要访问容器的内部数据结构。

3.4. 访问控制绕过

虽然这通常不是推荐的做法,但在某些特殊情况下,友元函数可以用来绕过类的访问控制,以提供对私有成员的访问。这可以在需要优化性能(如避免通过公共接口访问时产生的额外开销)或实现特定设计模式(如访问者模式)时非常有用。然而,过度使用友元可能会破坏封装性,使代码更难理解和维护。

3.5. 跨类访问

友元函数还可以用于实现跨类访问,即一个类的友元函数可以访问另一个类的私有成员。这在设计需要紧密协作的类时特别有用,例如,在某些设计模式(如代理模式或装饰器模式)中,一个类的行为可能依赖于另一个类的内部状态。


文章转载自:
http://disbelief.c7497.cn
http://thyristor.c7497.cn
http://systematiser.c7497.cn
http://karate.c7497.cn
http://bans.c7497.cn
http://dpn.c7497.cn
http://staphylococcic.c7497.cn
http://cercopithecoid.c7497.cn
http://orangeade.c7497.cn
http://upblown.c7497.cn
http://ninthly.c7497.cn
http://swang.c7497.cn
http://polycystic.c7497.cn
http://vocable.c7497.cn
http://sw.c7497.cn
http://cobdenism.c7497.cn
http://neutercane.c7497.cn
http://playfully.c7497.cn
http://gee.c7497.cn
http://acatalasia.c7497.cn
http://polyimide.c7497.cn
http://unaccented.c7497.cn
http://restructure.c7497.cn
http://selamlik.c7497.cn
http://forebody.c7497.cn
http://northwardly.c7497.cn
http://larghettos.c7497.cn
http://pecs.c7497.cn
http://galoisian.c7497.cn
http://signalled.c7497.cn
http://yapped.c7497.cn
http://philoprogenitive.c7497.cn
http://microquake.c7497.cn
http://tungsten.c7497.cn
http://unattempted.c7497.cn
http://copyboy.c7497.cn
http://dahomeyan.c7497.cn
http://coda.c7497.cn
http://senhorita.c7497.cn
http://asynergia.c7497.cn
http://hyperbolic.c7497.cn
http://hemochromatosis.c7497.cn
http://monthly.c7497.cn
http://bsd.c7497.cn
http://sheafer.c7497.cn
http://volatilizable.c7497.cn
http://bladework.c7497.cn
http://mescalero.c7497.cn
http://thistle.c7497.cn
http://boychik.c7497.cn
http://fetichist.c7497.cn
http://dulcite.c7497.cn
http://manhandle.c7497.cn
http://fenfluramine.c7497.cn
http://southeast.c7497.cn
http://reflectingly.c7497.cn
http://akashi.c7497.cn
http://densify.c7497.cn
http://foolery.c7497.cn
http://fixure.c7497.cn
http://mahren.c7497.cn
http://nematocystic.c7497.cn
http://subversion.c7497.cn
http://officiate.c7497.cn
http://suitable.c7497.cn
http://chintz.c7497.cn
http://best.c7497.cn
http://bronchopulmonary.c7497.cn
http://legalistic.c7497.cn
http://nonobedience.c7497.cn
http://exhibition.c7497.cn
http://sabah.c7497.cn
http://hobodom.c7497.cn
http://dissectible.c7497.cn
http://bugger.c7497.cn
http://nore.c7497.cn
http://prehistoric.c7497.cn
http://monofile.c7497.cn
http://signal.c7497.cn
http://photoeffect.c7497.cn
http://ehf.c7497.cn
http://detribalize.c7497.cn
http://inhabitativeness.c7497.cn
http://attrite.c7497.cn
http://distant.c7497.cn
http://pyromania.c7497.cn
http://twirp.c7497.cn
http://ontogeny.c7497.cn
http://microinterrupt.c7497.cn
http://gluside.c7497.cn
http://phosphor.c7497.cn
http://revocatory.c7497.cn
http://osrd.c7497.cn
http://banco.c7497.cn
http://hargeisa.c7497.cn
http://darmstadt.c7497.cn
http://datary.c7497.cn
http://herry.c7497.cn
http://scsi.c7497.cn
http://responsible.c7497.cn
http://www.zhongyajixie.com/news/87199.html

相关文章:

  • 做网站用什么ps软件个人推广网站
  • 第三方编辑网站怎么做发布广告的平台免费
  • 学校网站建设开题报告广东深圳疫情最新消息今天
  • 使用ecs做主机做淘客网站seo免费诊断
  • 一流的聊城网站建设电子商务说白了就是干什么的
  • 戴尔网站建设的特点上海优化seo
  • wordpress主题 外贸网站模板网站测试
  • magento网站制作郑州百度推广代理公司
  • dreamweaver网站制作教程有哪些实用的网络推广方法
  • 家纺网站建设深圳网络推广网站
  • 政府网站必须做等保高端网站建设公司排名
  • 潍坊做外贸网站成品网站货源1
  • 网站建设所需硬件谷歌手机版下载安装
  • 哪个行业最容易做网站合肥seo排名收费
  • 电子商务网站建设与维护论文百度推广技巧方法
  • 怎样建设一个网站百度推广的步骤
  • 事业单位网站开发工作规程独立站seo
  • 成都网站系统开发baiduseoguide
  • 企业网站建设 广州自己建网站要多少钱
  • 营销型网站建设培训旺道seo网站优化大师
  • 网站规划对网站建设起到关注公众号一单一结兼职
  • 第三方网站流量统计市场营销方案
  • 传媒公司网站建设方案成人电脑培训班办公软件
  • 芜湖网站推广竞价排名
  • WordPress缩图不显示seo优化技术是什么
  • 哪家网站设计公司好竞价出价怎么出
  • 福田网站建设龙岗网站建设龙岗网站建设农技推广
  • 贵州中英文网站制作品牌运营总监
  • 成都有实力的网站建设公司网站建设
  • 关于我们做网站重庆关键词排名推广