python中有友元函数 定义一个友元函数

友元函数有什么作用

问题一:友元函数有什么作用,它主要用在哪些情况下? 定义格式(c++):

成都创新互联专注于企业成都营销网站建设、网站重做改版、新建网站定制设计、自适应品牌网站建设、H5网站设计电子商务商城网站建设、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为新建等各大城市提供网站开发制作服务。

friend ();

分清成员函数,非成员函数和友元函数

成员函数和非成员函数最大的区别在于成员函数可以是虚拟的而非成员函数不行。所以,如果有个函数必须进行动态绑定(见条款38),就要采用虚拟函数,而虚拟函数必定是某个类的成员函数。关于这一点就这么简单。如果函数不必是虚拟的,情况就稍微复杂一点。 (条款38: 决不要重新定义继承而来的缺省参数值)

举例

看下面表示有理数的一个类:

class rational {

public:

rational(int numerator = 0, int denominator = 1);

int numerator() const;

int denominator() const;

private:

...

};

这是一个没有一点用处的类。(用条款18的术语来说,接口的确最小,但远不够完整。)所以,要对它增加加,减,乘等算术操作支持,但是,该用成员函数还是非成员函数,或者,非成员的友元函数来实现呢?

当拿不定主意的时候,用面向对象的方法来考虑!有理数的乘法是和rational类相联系的,所以,写一个成员函数把这个操作包到类中。

class rational {

public:

...

const rational operator*(const rational rhs) const;

};

(如果你不明白为什么这个函数以这种方式声明――返回一个const值而取一个const的引用作为它的参数――参考条款21-23。)

条款21: 尽可能使用const

条款22: 尽量用“传引用”而不用“传值”

条款23: 必须返回一个对象时不要试图返回一个引用

现在可以很容易地对有理数进行乘法操作:

rational oneeighth(1, 8);

rational onehalf(1, 2);

rational result = onehalf * oneeighth; 运行良好

result = result * oneeighth; 运行良好

但不要满足,还要支持混合类型操作,比如,rational要能和int相乘。但当写下下面的代码时,只有一半工作:

result = onehalf * 2; 运行良好

result = 2 * onehalf; 出错!

这是一个不好的苗头。记得吗?乘法要满足交换律。

如果用下面的等价函数形式重写上面的两个例子,问题的原因就很明显了:

result = onehalf.operator*(2); 运行良好

result = 2.operator*(onehalf); 出错!

对象onehalf是一个包含operator*函数的类的实例,所以编译器调用了那个函数。而整数2没有相应的类,所以没有operator*成员函数。编译器还会去搜索一个可以象下面这样调用的非成员的operator*函数(即,在某个可见的名字空间里的operator*函数或全局的operator*函数):

result = operator*(2, onehalf); 错误!

但没有这样一个参数为int和rationa......

问题二:c++中 友元函数 是什么,有什么用 某些不是类方法的函数如果需要访问类的私有成员就可以把这个函数声明为这个类的友元函数, 只是可以让类外头的函数访问类的私有变量而已, 觉得能用到就用, 虚函数是多态时用到的东西和友元没什么关系

问题三:在C++中,为什么要使用到友元函数呢?有什么好处呢?能否举个例子 友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。

举个通俗的例子吧,

一个家庭,对一般的访客开发的是客厅,厨房等,但卧室这样的私人地方一般访客是禁止访问的,而好朋友 就可以进去了,

问题四:什么是友元?它的作用有哪些?什么是友元函数和友元类 友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。

举个通俗的例子吧,

一个家庭,对一般的访客开发的是客厅,厨房等,但卧室这样的私人地方一般访客是禁止访问的,而好朋友 就可以进去了,

问题五:友元函数的作用是什么? 让一个不是类的成员函数的函数可以访问修改类的私有变量

问题六:友元函数有哪些特点? 友元函数和友元类: 通过友元,一个普通函数或类的成员函数可以访问另一个类的私有数据成员。 友元分为友元函数和友元类,关键字friend放在函数名之前,该函数就是友元函数,放在类名之前,该类就是友元类。友元声明在公有部分还是私有部分都不影响它的使用。 一个函数可以被多个类声明为友元这样就可引用多个类中的私有数据。 友元的关系是单向的,不是双向的。 友元关系不能传递。 给个例子:

#includeusing namespace std;#includeclass Time{ public: Time(int,int,int); friend void display(Time );友元函数的声明 private: int hour,minute,second;};

Time::Time(int h,int m,int s){ hour=h; minute=m; second=s;}

void display(Time t){ cout 问题七:C++中友元函数的优缺点 C++中,定义一个类中的成员分为私有成员、受保护成员和公有成员,我们知道,这些私有成员和受保护的成员是无法通过对象直接访问的,而是要通过调用公有成员函数从而间接的访问这些私有成员,那假如我的程序中出现循环要重复访问这个私有成员时,每次都要先通过调用公有成员间接的来访问该私有成员,这将造成空间和时间上的大大浪费。

所以,我们就想怎么样能够使对象直接访问这些私有成员呢?那我们就引入了友元这个概念,假设定义了一个A类,又定义了一个B类,如果我们想使B中的某个函数f1可以直接访问A类中的私有成员,那我们就在该函数f1的前面加上friend。

嘿嘿 废话比较多 只是想让你更加深入的了解友元。

如果让我说优缺点的话(用我的话来说):

(1)优点:可以使定义为友元函数或者友元类的函数直接访问另一个类中的私有成员和受保护成员,提高效率,方便编程。

(2)缺点:破坏了类的封装性,提供了安全漏洞

问题八:什么叫友元函数? 友元函数和友元类

采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

友元函数 :

友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:

friend 类型 函数名(形式参数);

友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。

一个函数可以是多个类的友元函数,只需要在各个类中分别声明。

友元函数的调用与一般函数的调用方式和原理一致。

友元类 :

友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。

当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下:

friend class 类名;

其中:friend和class是关键字,类名必须是程序中的一个已定义过的类。

例如,以下语句说明类B是类A的友元类:

class A

{

public:

friend class B;

};

经过以上说明后,类B的所有成员函数都是类A的友元函数,能存取类A的私有成员和保护成员。

使用友元类时注意:

(1) 友元关系不能被继承。

(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。

(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明

问题九:友元函数与成员函数的区别? 友元函数是非成员函数,可以在他的函数体中可以通过对象名访问类的的私有和保护成员,一般情况下,它在类中声明,在类外实现

菜鸟问题:基类中的友元类,友元函数能不能被派生类继承?

友元函数不是遗传的,这是基类函数,一个朋友,不能继承派生类B,也就是说函数不能访问一个朋友B增加其成员(但是要注意,不能访问B新成员,但也可以访问基类的成员B)。

普通类的友元函数,可以访问类的所有成员:

#include iostream

classA{

friend void printElement(const A a);

public:

A(inttheElement):element(theElement){}

void print(){std::coutelementstd::endl;}

protected:

intelement;

};

void printElement(const A a){

std::couta.element;

这个printElement友元函数是可以访问类A中的所有成员的,这是最简单的一种友元关系。

扩展资料:

模板基类和模板派生类中的友元关系:模板派生类的友元函数可以访问模板基类中的成员函数,但是在访问友元函数时要注意包含模板基类的类作用域解析器:

templatetypename T

classA{//没有乱码

public:

A(inttheElement):element(theElement){}

void print(){std::coutelementstd::endl;}

protected:

intelement;

};

templatetypename T

class B : public AT{

templatetypename C friend void printElement(const BC a);

public:

B(int theElement):AT(theElement){}

voidprint(){

  AT::print();

};

templatetypename T void printElement(const BT a){

std::couta.AT::element;

//一定要注意,使用模板基类中的成员的时候一定要加上基类的类作用域解析符!

14. 友元函数如何定义?在类中定义的友元函数是该类的成员函数吗?

友元是一种定义在类的外部的普通函数或类,但它需要在类体内进行说明。为了与该类的成员函数加以区别,使用关键字friend,友元不是成员函数,但它可以访问类中的私有成员,这就破坏了类的封装性和隐藏性。友元分为友元函数和友元类两种。

友元函数能够访问类中的私有成员的非成员函数,定义:friend 函数原型。例如:friend 函数返回值 函数名(参数列表)。

python类和函数的区别

一、主体不同

1、类:是面向对象程序设计实现信息封装的基础。

2、函数:是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。

二、特点不同

1、类:是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。

2、函数:分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。

三、规则不同

1、类:实质是一种引用数据类型,类似于byte、short、int(char)、long、float、double等基本数据类型,不同的是它是一种复杂的数据类型。

2、函数:函数必须声明后才可以被调用。调用格式为:函数名(实参)调用时函数名后的小括号中的实参必须和声明函数时的函数括号中的形参个数相同。

参考资料来源:百度百科-函数

参考资料来源:百度百科-类

一个类的友元类中的成员函数都是这个类的友元函数?

友元函数和类的成员函数都可以访问类的私有成员变量或者是成员函数,但是他们调用的形式不同。

类的成员函数是属于类的,所以调用的时候是通过指针this调用的。

而类的友元函数不属于类,当然也不能有this指针了,也就是在友元函数中不能出现this指针。

同时友元函数是有关键字friend修饰。

再有的情况下,友元函数是很有用的。特别是在重载一些操作符的时候用处很明显。


本文标题:python中有友元函数 定义一个友元函数
文章地址:http://scyanting.com/article/hijgje.html