精华内容
下载资源
问答
  • 友元类的使用

    2019-06-19 10:50:26
    #include using namespace std; class Watch; /** 定义Time类 数据成员:m_iHour, m_iMinute,...友元类:Watch */ class Time { // 友元类 friend Watch; public: Time(int hour, int min, int sec) { m_iHour =...

    #include
    using namespace std;
    class Watch;

    /**

    • 定义Time类
    • 数据成员:m_iHour, m_iMinute,m_iSecond
    • 成员函数:构造函数
    • 友元类:Watch
      */
      class Time
      {
      // 友元类
      friend Watch;
      public:
      Time(int hour, int min, int sec)
      {
      m_iHour = hour;
      m_iMinute = min;
      m_iSecond = sec;
      }
      private:
      int m_iHour;
      int m_iMinute;
      int m_iSecond;
      };

    /**

    • 定义Watch类

    • 数据成员:m_tTime

    • 成员函数:构造函数

    • display用于显示时间
      */
      class Watch
      {
      public:
      Watch(int hour,int min,int sec);

      void display()
      {
      cout << m_tTime.m_iHour << endl;
      cout << m_tTime.m_iMinute << endl;
      cout << m_tTime.m_iSecond << endl;
      }
      private:
      Time m_tTime;
      };

    Watch::Watch(int hour,int min,int sec):m_tTime( hour, min, sec)
    {

    }

    int main()
    {
    Watch w(6, 30, 20);
    //Watch w(t);
    w.display();

    return 0;
    

    }

    展开全文
  • C++友元类的使用 题目要求:教师类作为学生类的友元类,操作学生的学分和总成绩。 思路分析:教师类作为学生类的友元类,所以包含: class student{ friend class teacher; }; 教师类的设计,包含教师可以给学生...

    C++友元类的使用

    题目要求:教师类作为学生类的友元类,操作学生的学分和总成绩。
    思路分析:教师类作为学生类的友元类,所以包含:

    class student{
    	friend class teacher;
    	};
    

    教师类的设计,包含教师可以给学生增加学分和增加成绩,而且由于教师类是学生类的友元,所以教师类在访问学生类的时候可以直接通过student.name的形式来访问学生的所有成员变量(包括私有的),不用在学生类中添加成员函数来获得值或者修改值。
    学生类:

    class student{
    	friend class teacher;
    	private:
    		string m_name;
    		int m_fen;
    		int m_mark;
    	public:
    		void show();
    		void SetName(string name);
    		student(string name="xxx",int fen=0,int mark=0);
    		string GetName();	
    };
    

    教师类:

    class teacher{
    	private:
    		string m_name;
    	public:
    		void Name(string name);
    		void SetFen(student &p,int fen);
    		void SetMark(student &p,int mark);
    		teacher(string name="x");
    		string GetName();
    };
    

    具体代码:

    #include<iostream>
    #include<string>
    using namespace std;
    class student{
    	friend class teacher;
    	private:
    		string m_name;
    		int m_fen;
    		int m_mark;
    	public:
    		void show();
    		void SetName(string name);
    		student(string name="xxx",int fen=0,int mark=0);
    		string GetName();	
    };
    class teacher{
    	private:
    		string m_name;
    	public:
    		void Name(string name);
    		void SetFen(student &p,int fen);
    		void SetMark(student &p,int mark);
    		teacher(string name="x");
    		string GetName();
    };
    void student::show(){
    	cout<<"姓名:"<<this->m_name<<"学分:"<<m_fen<<"成绩:"<<m_mark<<endl;
    }
    void student::SetName(string name){
    	this->m_name=name;
    }
    student::student(string name,int fen,int mark){
    	this->m_name=name;
    	this->m_fen=fen;
    	this->m_mark=mark;
    }
    string student::GetName(){
    	return this->m_name;
    }
    teacher::teacher(string name){
    	this->m_name=name;
    }
    string teacher::GetName(){
    	return this->m_name;
    }
    void teacher::SetFen(student &p,int fen){
    	p.m_fen=fen;
    	cout<<"教师"<<this->m_name<<"给学生"<<p.m_name<<"增加学分,操作成功"<<endl; 
    }
    void teacher::SetMark(student &p,int mark){
    	p.m_mark=mark;
    	cout<<"教师"<<this->m_name<<"给学生"<<p.m_name<<"增加成绩,操作成功"<<endl; 
    }
    void teacher::Name(string name){
    	this->m_name=name;
    }
    int main(){
    	string n;
    	int i,j,M,N;
    	cout<<"您需要建立几位学生和几位老师:";
    	cin>>M>>N;
    	student stu[M];teacher teach[N];
    	cout<<"请输入"<<M<<"位学生的姓名:";
    	for(int i=0;i<M;i++){
    		string n;
    		cin>>n;
    		stu[i].SetName(n);
    	}
    	cout<<"请输入"<<N<<"位老师的姓名:";
    	for(int i=0;i<N;i++){
    		string n;
    		cin>>n;
    		teach[i].Name(n);
    	}
    	bool flag=true;
    	while(flag){
    		cout<<"请选择一位教师:";
    		cin>>n;
    		for(i=0;i<N;i++){
    			if(n==teach[i].GetName())break;
    		}
    		cout<<"请选择一位学生:";
    		cin>>n;	
    		for(j=0;j<M;j++){
    			if(n==stu[j].GetName())break;
    		}
    		int fen,mark;
    		cout<<"请输入要增加的学分:";cin>>fen;
    		teach[i].SetFen(stu[j],fen);
    		cout<<"请输入要增加的总成绩:";cin>>mark;
    		teach[i].SetMark(stu[j],mark);
    		cout<<"还要继续吗(Y/N)?"<<endl;
    		cin>>flag; 
    	}
    	for(int i=0;i<M;i++)stu[i].show();
    	return 0;
    }
    

    运行截图:
    就这?就这?就这?
    注:部分学生的学分和成绩为0,是构造函数的默认值是0,可以修改为需要的。

    展开全文
  • 为了编程需要,当需要允许一个函数或类访问访问另一个类中的私有或保护成员时,这时可以将这些类或函数声明为类的友元友元函数的声明:friend <返回值类型><函数名><(参数列表)> 示例 ...

    友元函数

    1. 为了编程需要,当需要允许一个函数或类访问访问另一个类中的私有或保护成员时,这时可以将这些类或函数声明为类的友元。
    2. 友元函数的声明:friend <返回值类型><函数名><(参数列表)>

    示例


    友元类

    友元类的使用
    另外:

    1. 友元关系不能传递。
      B类是A类的友元,A类是C类的友元,如果没有特别声明,不能判断B类是C类的友元。
    2. 友元关系是单向的。
      B类是A类的友元,B类所有的成员函数均可访问A类中的所有私有成员和保护成员。但不能推断A类也是B类的友元。

    示例

    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    class A{
    	private:
    		int x;
    		int y;
    	public:
    		friend class B;   //类A的友元类B的声明
    		A(int px,int py):x(px),y(py){ }   //A的构造函数 
    		~A(){ } //A的默认析构函数
    		void print()
    		{
    			cout<<"("<<x<<","<<y<<")"<<endl;
    		}
    };
    
    class B{
    	private:
    		A a1,a2;  //B的两个私有成员是类A声明的两个对象 
    	public:
    		//类B中的所有成员函数都是类A的友元函数 
    		B(A pa1,A pa2):a1(pa1),a2(pa2){ } //B的构造函数 
    		~B(){ } //B的默认析构函数
    		void print()
    		{
    			a1.print();
    			a2.print();
    		}
    		double len()
    		{
    			return sqrt((a1.x-a2.x)*(a1.x-a2.x)+(a1.y-a2.y)*(a1.y-a2.y));
    		} 
    };
    
    int main()
    {
    	A a1(1,3),a2(5,8);
    	B b(a1,a2);
    	cout<<"两点的坐标为:"<<endl;
    	b.print();
    	cout<<"两点之间的距离为:"<<b.len()<<endl;
    	return 0;
    } 
    

    展开全文
  • C++友元函数和友元类的使用基础

    千次阅读 2013-03-13 11:27:52
    友元函数百度百科:  友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。... 友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。

          友元函数百度百科:

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

          友元类百度百科:

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

          首先来看看友元函数的参考代码:

         

    #include <iostream>
    using namespace std;
    class MyClass1
    {
       int n;
    public:
       MyClass1() { n=0;}
       MyClass1(int i) {n=i;}
       friend MyClass1 square(MyClass1);
       void display()
       {
         cout << "n=" << n <<endl;
       }
    };
    
    MyClass1 square(MyClass1 x)
    {
       int temp=x.n*x.n;
       return MyClass1(temp);
    }
    
    int main()
    {
       MyClass1 a(5),b;
       b=square(a);
       b.display();
    }

    程序运行结果截图:

    -----------------------------------------------------------------------------------------------------------------------------------------------

    然后再来看一看友元类的参考代码:

    #include <iostream>
    
    using namespace std;
    class A
    {
      int n;
    public:
      A() { n=5; };
      friend class B;  //  说明友元类B
    };
    
    class B
    {
    public:
      void display(A temp)
      {
        cout << "n=" <<temp.n<<endl;
      }
    };
    
    int main()
    {
      A a;
      B b;
      b.display(a);
      return 0;
    }
    

    程序运行结果截图:

    上面的代码在G++下编译运行成功。

    (------------------------完--------------------------)

    展开全文
  • 错误 2 error C2248: “X::i”: 无法访问 private 成员(在“X”中声明) c:\users\dell\desktop\project2\project2\main.cpp 26 1 Project2 错误 1 error C2027: 使用了未定义类型“Y” c:\users\dell\desktop\...
  • C++友元类的使用场景

    2018-01-31 10:34:52
    转载自:http://blog.csdn.net/adriano119/article/details/5914443
  • 如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了 使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护...
  • 首先我们来说一下友元函数 我们来举例说明---------------------------------------------------------------------------------------------- 代码实现如下: 需求:写一个函数求两个点中间点 #include <...
  • 友元的使用

    2018-07-03 08:58:25
    关于友元类:友元类的使用和声明极为简单,只需在需要访问的类中加上friend class Classname 即可 。这样被声明的友元类即可访问声明处的类的所有成员,同时声明的位置不限只需要在类中即可。 // Tv 是一个类,而...
  • C++友元学习与使用-友元函数、友元类 友元函数 class Person { int age; char sex; public: Person():age(18),sex('m'){}; }; void displayPerson(const Person &p) { cout << p.age << endl...
  • 友元函数与友元类的声明与使用

    千次阅读 2017-09-03 17:40:21
    如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了 使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护...
  • 学习了c++这么久,一直没有对友元进行了解,据说友元不是特别好用(据说,...比如:某个类去访问另一个类的私有成成员,或者一个函数去访问某个类的私有成员等等,都可以使用友元来实现。下面就友元做了两个小例子...
  • 友元函数和友元类的需要:类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又...
  • 友元类

    2019-08-19 15:52:14
    使用友元类时注意: (1) 友元关系不能被继承。 (2) 友元关系是单向,不具有交换性。若类B是类A友元,类A不一定是类B友元,要看在类中是否有相应声明。 (3) 友元关系不具有传递性。若类B是类A友元,类C是B...
  • 类是面向对象的基础,其中一个重要特征就是数据的封装性与屏蔽性,但有时候有需要一个类访问另一个类的数据成员,这时就需要友元类或者友元函数了,下面是自己写得一个简单的友元类,它的声明方式是friend class ...
  • a)目的:使用单个声明使Y类的所有函数成为类X的友元 它提供一种类之间合作的一种方式,使类Y的对象可以具有类X和类Y的功能 具体来说: 前提:A是B的友元(=》A中成员函数可以访问B中有所有成员,包括私有成员...
  • 如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了 使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护...
  • 友元类与函数可以访问类的private与protected变量,权限比派生类还要高,可以通过类对象访问,而派生类只能在类内部访问继承来的protected变量。 示例如下 #include <iostream> using namespace std; class A...

空空如也

空空如也

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

友元类的使用