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

    千次阅读 2018-06-13 17:58:18
    #ifndef POINT_H#define POINT_Hclass point{public: point(int x,int y); int getX(); int getY(); friend float dist(point &p1,point &p2);private: int x,y;};#endif // POINT_H#include...
    #ifndef POINT_H
    #define POINT_H
    class point
    {
    public:
        point(int x,int y);
        int getX();
        int getY();
        friend float dist(point &p1,point &p2);
    private:
        int x,y;
    };

    #endif // POINT_H




    #include "point.h"
    #include<cmath>
    #include<iostream>
    
    
    
    
    point::point(int x,int y):x(x),y(y)
    {
    
    
    }
    int point::getX(){return x;}
    int point::getY(){return y;}
    
    

    #include <QCoreApplication>
    #include "point.h"
    #include<cmath>
    #include<iostream>
    using namespace std;
    
    
    float dist(point &p1,point &p2)
    {
       double x=p1.x-p2.x;
       double y=p1.y-p2.y;
       return static_cast<float>(sqrt(x*x+y*y));
    }
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
    
        point mp1(1,1),mp2(4,5);
        cout<<"The distance is"<<endl;
        cout<<dist(mp1,mp2)<<endl;
    return 0;
        return a.exec();
    }
    
    
    展开全文
  • 在类定义中可以通过friend关键字,将其它的类和函数声明为友元类和友元函数,这样他们就可以访问自己的私有变量,友元关系不具备继承性和相互性 ???? 将普通函数声明为自己的友元函数 class Value { private: ...

    ? 声明友元关系
    在类定义中可以通过friend关键字,将其它的类和函数声明为友元类和友元函数,这样他们就可以访问自己的私有变量,友元关系不具备继承性和相互性

    ? 将普通函数声明为自己的友元函数

    
    	class Value {
    	private:
    	    int value = 100;
    	    friend void show(Value* value);
    	};
    	
    	void show(Value* vPtr){
    	    cout << vPtr->value << endl;
    	}
    
    

    ? 将类的成员函数声明为自己的友元函数

    
    	//由于类需要被其它代码用到,所以必须提前声明
    	class Value;
    	
    	class Object {
    	public:
    	    void show(Value* vPtr);
    	};
    	
    	class Value {
    	private:
    	    int value = 100;
    	    friend void Object::show(Value* value);
    	};
    	
    	void Object::show(Value* vPtr){
    	    cout << vPtr->value << endl;
    	}
    
    

    ? 将类声明为自己的友元类

    
    	//由于类需要被其它代码用到,所以必须提前声明
    	class Value;
    	class Object {
    	public:
    	    void show(Value* vPtr);
    	    void hello(Value* vPtr);
    	};
    	
    	class Value {
    	private:
    	    int value = 100;
    	    friend class Object;
    	};
    	
    	void Object::show(Value* vPtr){
    	    cout << vPtr->value << endl;
    	}
    	
    	void Object::hello(Value* vPtr){
    	    cout << vPtr->value << endl;
    	}
    
    
    展开全文
  • 友元类和友元函数

    2015-07-21 10:48:25
    友元函数和友元类 采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又...

    友元函数和友元类

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

    友元函数 :
    友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字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的友元,同样要看类中是否有相应的申明 
    
    展开全文
  • C++友元函数与友元类

    2020-04-01 12:50:27
    友元函数和一种朋友关系,它不属于,但可以访问的私有成员,它和是一种朋友关系,也不需要用的对象去驱动,例如下面的代码: #include <iostream> using namespace std; class ASD{ friend int...

    一  友元函数的定义与调用 

           C++类除了成员函数,静态成员函数,还有一种函数:友元函数。

           友元函数和类一种朋友关系,它不属于类,但可以访问类的私有成员,它和类是一种朋友关系,也不需要用类的对象去驱动,例如下面的代码:

    #include <iostream>
    using namespace std;
    
    class ASD{
        friend int getData(const ASD& asd);
    
    private:
        int m_Value;
    
    public:
        ASD(int value = 0):m_Value(value){}
        ~ASD(){}
    };
    
    int getData(const ASD& asd)
    {
        return asd.m_Value;
    }
    
    int main() {
        ASD obj(123);
        cout << "m_Value = " << getData(obj) << endl;
    
        return 0;
    }
    

          getData是类ASD的友元函数,在大括号里声明,在外面定义,不需要作用域限定符,调用的时候就和全局函数一样的调用。

    二 友元函数的应用

         友元函数经常应用于运算符重载。例如下面的代码,实现数和对象相加

    #include <iostream>
    
    using namespace std;
    
    class Fushu
    {
        friend Fushu operator+(int i, const Fushu& fu);
    
    private:
        int m_Real;
        int m_Xu;
    
    public:
        Fushu(int real, int xu)
        {
            m_Real = real;
            m_Xu = xu;
        }
    
        int getReal()
        {
            return m_Real;
        }
    
        int getXu()
        {
            return m_Xu;
        }
    };
    
    Fushu operator+(int i, const Fushu& fu)
    {
        int real = i + fu.m_Real;
        int xu = fu.m_Xu;
        return Fushu(real, xu);
    }
    
    int main()
    {
        Fushu f1(3, -2);
        Fushu f2 = 4 + f1;
    
        cout << f2.getReal() << f2.getXu() << "i" << endl;
    
        return 0;
    }
    

    三 友元类

            友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。

    关于友元类的注意事项:

    (1) 友元关系不能被继承。
    (2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
    (3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明。

    代码如下:

    #include <iostream>
    
    using namespace std;
    
    class A
    {
        friend class C;  //这是友元类的声明, C是A的友元类
    
    private:
        int data;
    };
    
    class C             //友元类定义,为了访问类A中的成员
    {
    public:
        void show(int x, A& a)
        {
            a.data = x; 
            cout << a.data << endl; 
        }
    };
    
    int main(void)
    {
        class A a;
        class C c;
    
        c.show(1, a);    //C的对象访问A的成员
    
        return 0;
    }

               总结:友元可以访问类的私有属性,但破坏了类的封装性。

    展开全文
  • 友元函数与友元类

    2015-01-03 19:38:51
    被指定为某类的友元的称为授予友元关系的那个类的友元类。 在需要允许某些特定的非成员函数访问一个类的私有成员(及受保护成员),而同时仍阻止一般的访问的情况下,友元是有用的。 使用友元的优点:可以灵活...
  • 友元类的作用

    2013-09-24 11:16:21
    友元类的作用 分类: c/c++编程2008-10-03 10:38 2612人阅读 评论(0) 收藏 举报 classc  定义:  class B  {  private:  B()  {  }  friend class A;  
  • 二、友元类 三、友元的优缺点 一、友元函数 结合着类的特性,可知:类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有...
  • 什么时候应该用到友元类

    千次阅读 2011-09-21 21:16:08
    什么时候希望一个类成为另一个类的友元类呢?我们来看一个例子: 假定需要编写一个模拟电视机和遥控器的简单程序。决定定义一个Tv类和一个Remote类,来分别表示电视机和遥控器。很明显,这两个类之间应当存在某种...
  •  一个的私有数据成员通常只能由的函数成员来访问,而友元函数可以访问的私有数据成员,也能访问其保护成员 2. 友元函数的用处体现在哪里?  2.1 使用友元函数可提高性能,如:用友元函数重载操作符和生成...
  • 采用类的机制后实现了数据的隐藏与封装,类的数据成员...除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和
  • 0019:Qt常用 - QRect

    千次阅读 2019-05-16 22:27:13
    1 开发环境 在介绍内容之前,先说明一下开发环境,如下图: Qt版本:Qt5.3.2; Qt开发工具:Qt Creater ...QRect代表一个矩形区域,实现在QtCore库,是一个QPoint对象和一个QSize对象的组合,QPoint对象是它的左...
  • 0017:Qt常用 - QPoint

    2019-05-14 22:10:44
    1 开发环境 在介绍内容之前,先说明一下开发环境,如下图: Qt版本:Qt5.3.2;...QPoint是Qt中表示点的坐标,用整型值来表示某个点的x坐标和y坐标。首先,将QPoint中的常用接口整理出来,分为初始...
  • 0018:Qt常用 - QSize

    千次阅读 2019-05-15 20:13:03
    1 开发环境 在介绍内容之前,先说明一下开发环境,如下图: Qt版本:Qt5.3.2;...QSize使用整型值定义了一个二维对象的尺寸,即:宽和高。首先,将QSize中的常用接口整理出来,分为初始化、设置和获取、判...
  • 友元 友元函数及

    2016-03-19 10:36:49
    #include #include using namespace std;...class Dog // 这个是Dog的定义, { public: int foo(Screen& screen); /*int koo(Screen& screen); */// 这个不能用友元函数调用私有成员函数, }; class
  • Qt - 的成员变量

    2021-02-17 15:56:04
    在查看qt的源码时候,qt使用了代理的方式,将数据单独抽象成一个Class##Private ,所有的成员变量的都是由这个来完成的。 例如:QThread ,可以看到从表面上没有看到任何成员变量,那我们就来看看qt是如何...
  • QObject ——QT所有的基类

    千次阅读 2010-10-19 10:14:00
    QObject ——QT所有的基类QObject是QT所有的基类,QObject是Qt Object Model的核心 <br />CODE: <br />/* 什么是Qt Object Model,主要包括如下的东西 1.信号和槽 2.良好的对象属性,...
  • https://blog.csdn.net/yxy244/article/details/103369382?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduend...utm_term=qt%E8%8E%B7%E5%8F%96ui%E9%87%8C%E7%9A%84%E6%8E%A7%E4%BB%B6
  • C++ 要想使成员函数 设成回调函数 ,查资料一般都把函数设成static 类型或什么友元函数。如果设成static类型 涉及到UI界面更新的话,UI元素也要写成static 的 比较麻烦。 以前用信号槽更新界面内容,今天尝试用回调...
  • 友元函数

    2018-04-14 18:12:21
    友元函数和友元类友元函数和不同函数的区别:友元函数在类中声明,那么这个函数就能访问里面的所有成员变量。 友元函数想干嘛?如果我自己定义了一个函数,函数的形参是一个对象,在函数体里面,通过这个对象我访问...
  • 情况说明:在做一个项目时,同一个项目中classB 需要访问classA的私有化UI部件,在classA中已经将classB声明为友元类,在classB.cpp文件也包含了classA.h文件,但是还是报出了: error: member access into ...
  • 在继承之外,在C++中一个类成员函数调用另一个类成员的方法主要有:类的组合,友元类,类的前向声明,单例模式等,下面主要讲讲这4种方法的实现 方法1:利用类的组合 组合通俗来讲就是类B有类A的属性,如声明一个...
  • 原文地址::http://blog.csdn.net/newthinker_wei/article/details/22789885 相关文章 1、QT:QObject 简单介绍 ----...QObject是QT所有的基类----http://blog.csdn.
  • 就是把一个的成员函数设置成另一个友元函数,以便访问这个的成员函数访问那个的私有成员。 #include <iostream> #include<string> using namespace std; class building;//前向引用声明 class...
  • QTQt QFlags源码分析

    千次阅读 2017-08-09 18:37:15
    QFlags是个模板,目的是提供类型安全的enum,在头文件qflags.h中定义,传统上C++使用int或uint存储enum值,却没有作类型检查。1、QFlagQFlag是一个基础,还用到了QTypeInfo,定义如下:// 在C++11中Q_DECL_...
  • Qt--QObject

    千次阅读 2017-11-22 12:12:39
    Object元对象模型或者说使用信号与槽机制,必须继承的根基,一般面向对象语言都会有这么一个根基,提供了语言的基础,那么Qt作为C++的扩展库,QObject作为Qt的根,为我们提供了哪些功能呢?对象树在Qt的构造...
  • Qt Creator 下创建一个myWidget //myWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> QT_BEGIN_NAMESPACE namespace Ui { class myWidget; } QT_END_NAMESPACE class myWidget :...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,063
精华内容 425
关键字:

qt友元类