zoukankan      html  css  js  c++  java
  • 友元函数 友元类 及用法

    友元函数可以修改访问类内部的私有成员,

    友元函数的参数之一是类元素,类指针或者是类引用,意思是修改某个对象中的类私有成员(对象一般是访问不了类私有成员的).

    若F类是A类的友元类,那么F类的所有成员函数都是A类的友元函数,在F类里声明一个A类的对象a,在F类内部,这个对象a可以直接访问A类的私有成员.

    友员类通常设计为一种对数据操作或类之间传递消息的辅助类

    #include "iostream"
    using namespace std;
    
    class A1
    {
    public:
    	A1()
    	{
    		a1 = 100;
    		a2 = 200;
    	}
    	int getA1()
    	{
    		return this->a1;
    	}
    	//声明一个友元函数
    	friend void setA1(A1 *p, int a1); //什么这个函数是这个类的好朋友
    	
    protected:
    private:
    	int a1;
    	int a2;
    };
    
    void setA1(A1 *p, int a1)
    {
    	p->a1 = a1;
    }
    //friend 破坏了类的封装性。。。。
    //friend关键字是一个关系户
    //why 无奈之际 java class
    //java---》1.class==》class==>java类
    //java类的反射 sun jdk api
    
    //cc++ 1预编译gcc -E 2汇编 gcc -i 3编译gcc -c 3、链接ld ===》汇编代码
    //friend 
    //应用场景。。。。。
    //const关键字 冒牌货c
    //register
    //typedef 混号王 
    
    void main11()
    {
    	A1 mya1;
    	cout<<mya1.getA1()<<endl;
    	setA1(&mya1, 300);
    	cout<<mya1.getA1()<<endl;
    
    	system("pause");
    }
    
    class A
    {
    	//b是a的好朋友	
    	friend class B;
    public:
    	void display()
    	{
    		cout<<x<<endl;
    	}
    
    protected:
    private:
    	int x;
    };
    
    class B
    {
    public:
    	void setA(int x)
    	{
    		Aobj.x = x;
    	}
    	void printA()
    	{
    		cout<<Aobj.x<<endl;
    	}
    protected:
    private:
    	A Aobj;
    
    };
    
    void main()
    {
    	B b1;
    	b1.setA(100);
    	b1.printA();
    	system("pause");
    }
    

      

  • 相关阅读:
    redis的实现过程
    文件流的操作
    已知json类型根据类型封装集合
    linq小知识总结
    设计模式之策略模式
    jq实现竞拍倒计时
    SqlDependency缓存数据库表小案例
    渗透之路基础 -- 初窥文件解析漏洞
    渗透之路基础 -- 文件上传
    渗透之路进阶 -- SQL注入进阶(盲注和报错注入)
  • 原文地址:https://www.cnblogs.com/c-slmax/p/5183930.html
Copyright © 2011-2022 走看看