精华内容
下载资源
问答
  • C++友元函数

    2017-02-08 20:18:04
    C++友元函数
    #include <cmath>
    #include <iostream>
    using namespace std;
    class Point
    {
    public:
    	Point(double xx,double yy)
    	{
    		x=xx;
    		y=yy;
    	}
    	void GetXY() const;
    	friend double Distance(const Point& a,const Point& b);
    	// 运算符重载
    	friend ostream& operator<< (ostream& os,const Point& p);
    private:
    	double x,y;
    };
    void Point::GetXY() const
    {
    	cout<<"("<<x<<","<<y<<")"<<endl;
    }
    double Distance(const Point& a,const Point& b) // 注意函数名前未加类声明符
    {
    	double length;
    	// 它可以引用类中的私有成员
    	length=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    	return length;
    }
    ostream& operator<< (ostream& os,const Point& p)
    {
    	return 	os<<"("<<p.x<<","<<p.y<<")";
    }
    
    int main(void)
    {
    	Point p1(3.0,4.0),p2(6.0,8.0);
    	// 成员函数的调用方法,通过使用对象来调用
    	p1.GetXY();
    	p2.GetXY();
    	// 运算符重载
    	cout<<p1<<endl;
    	cout<<p2<<endl;
    	// 友元函数的调用方法,同普通函数的调用一样,不要像成员函数那样调用
    	double d = Distance(p1,p2);
    	cout<<d<<endl;
    	system("pause");
    	return 0;
    }

    展开全文
  • C++ 友元函数

    2018-05-06 20:32:09
    C++ 友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数...

    C++ 友元函数

    类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。
    友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。
    如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示:
    class Box
    {
    double width;
    public:
    double length;
    friend void printWidth( Box box );
    void setWidth( double wid );
    };
    声明类 ClassTwo 的所有成员函数作为类 ClassOne 的友元,需要在类 ClassOne 的定义中放置如下声明:
    friend class ClassTwo;
    请看下面的程序:

    #include <iostream>
    
    using namespace std;
    
    class Box
    {
       double width;
    public:
       friend void printWidth( Box box );
    friend写在前面
    
       void setWidth( double wid );
    };
    
    // 成员函数定义
    void Box::setWidth( double wid )
    {
        width = wid;
    }
    
    // 请注意:printWidth() 不是任何类的成员函数
    void printWidth( Box box )
    {
       /* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */
       cout << "Width of box : " << box.width <<endl;
    }
    
    // 程序的主函数
    int main( )
    {
       Box box;
    
       // 使用成员函数设置宽度
       box.setWidth(10.0);
    
       // 使用友元函数输出宽度
       printWidth( box );
    
       return 0;
    }

    当上面的代码被编译和执行时,它会产生下列结果:
    Width of box : 10

    展开全文
  • c++友元函数

    2021-02-02 09:38:28
    c++允许友元函数访问类中的私有数据,无this指针。 其他类,类的成员函数,全局函数都可用作为友元函数。 声明时,前面加关键字friend。 全局函数作为友元函数 一个类的某个成员函数作为另一个类的友元。 要访问...

    友元的种类

    1.友元函数
    2.友元类
    3.友元成员函数

    友元函数

    • c++允许友元函数访问类中的私有数据,无this指针。
    • 其他类,类的成员函数,全局函数都可用作为友元函数。
    • 声明时,前面加关键字friend,只有在类声明的原型中才能使用friend关键字,除非函数定义也是原型,否则,不能在定义中使用friend关键字。

    全局函数作为友元函数

    在这里插入图片描述

    一个类的某个成员函数作为另一个类的友元。

    • 要访问哪一个类中的私有数据成员,就在哪个类中声明friend函数。
      在这里插入图片描述

    一个类的所有成员函数作为另一个类的友元。

    • 要访问哪一个类中的私有数据成员,就在哪个类中声明friend类。
      在这里插入图片描述

    友元函数继承

    • 由于友元函数不是成员函数,所以不能继承,可以通过强制类型转换,派生类引用或指针转为基类引用或指针,然后使用转换后的指针或引用来调用基类的友元函数。
    std::ostream & operator<<(std::ostream & os, const baseDMA & rs)
    {
        os << "Label: " << rs.label << std::endl;
        os << "Rating: " << rs.rating << std::endl;
        return os;
    }
    
    std::ostream & operator<<(std::ostream & os, const hasDMA & hs)
    {
        os << (const baseDMA &) hs; /强制类型转换为基类对象
        os << "Style: " << hs.style << std::endl;
        return os;
    }
    
    • 也可以使用dynamic_cast<转换类型>进行强制类型转换(这种形式最佳):
    os << dynamic_cast<const baseDMA &> (hs);
    
    展开全文
  • c++ 友元函数

    2020-04-23 10:13:18
    尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。 如果要...

    定义

    类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

    友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。

    如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示:

    题目:

    定义Boat和Car两个类,二者都有一个weight属性,定义它们的一个友元函数totalWeight( ),计算二者的重量和。

    代码如下:

    #include <iostream>
    #include <string.h>
    #include <map>
    #include<queue>
    #include<unordered_map>
    using namespace std;
    #pragma warning(disable:4996)
    
    class Car;//先声明
    
    /*boat类*/
    class Boat {
    	int weight;
    public:
    	void setWeight(int setwei);
    	int getWeight();
    	friend int totalWeight(Boat boat, Car car);
    };
    // 成员函数定义
    void Boat::setWeight(int setwei) {
    	weight = setwei;
    }
    // 成员函数定义
    int Boat::getWeight() {
    	return weight;
    };
    
    /*car类*/
    class Car {
    	int weight;
    public:
    	void setWeight(int setwei);
    	int getWeight();
    	friend int totalWeight(Boat boat, Car car);
    };
    // 成员函数定义
    void Car::setWeight(int setwei) {
    	weight = setwei;
    }
    // 成员函数定义
    int Car:: getWeight() {
    	return weight;
    }
    
    /*计算car和boat的总重量,该函数不是任何类的成员函数*/
    int totalWeight(Boat boat,Car car) {
    	return car.weight + boat.weight;
    }
    
    int main() {
    	Boat boat;
    	Car car;
    
    	//使用成员函数设置
    	boat.setWeight(10);
    	car.setWeight(20);
    	
    	cout<<"boat的重量是:"<<boat.getWeight()<<endl;
    	cout<<"car的重量是:"<<car.getWeight()<<endl;
    	//使用友元函数输出
    	cout << "boat与car的总重量:"<<totalWeight(boat,car)<< endl;
    }
    

    结果如下:

    在这里插入图片描述

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,407
精华内容 2,562
关键字:

c++友元函数

c++ 订阅