当前位置: 首页 > wzjs >正文

做个人网站需要哪些玉溪市住房城乡建设局网站

做个人网站需要哪些,玉溪市住房城乡建设局网站,网站可以增加关键词吗,新手怎么把源码做成软件C中的友元函数和友元类 1.友元:2.友元的语法规则2.1 友元函数示例代码:普通函数作为类的友元函数示例代码:成员函数作为类的友元函数 2.2 友元类示例代码:友元类-某个类整体作为另外一个类的友元 3.特点示例代码:普通函…

C++中的友元函数和友元类

  • 1.友元:
  • 2.友元的语法规则
    • 2.1 友元函数
        • 示例代码:普通函数作为类的友元函数
        • 示例代码:成员函数作为类的友元函数
    • 2.2 友元类
        • 示例代码:友元类-某个类整体作为另外一个类的友元
  • 3.特点
        • 示例代码:普通函数作为类的友元函数写在类的里面

1.友元:

问题:无论使用何种继承,子类都是无法使用父类的私有成员

解决: C++提供了一种机制,A类的内部可以直接使用B类的私有成员(还是要用B类的对象调用私有成员) —》友元类
普通函数的内部可以直接使用某个类的私有成员 —》友元函数

2.友元的语法规则

2.1 友元函数

分为两种情况:

  • 普通函数作为类的友元函数
  • 成员函数作为类的友元函数(写法比较复杂)
friend 返回值 函数名(参数);
示例代码:普通函数作为类的友元函数
#include <iostream>
using namespace std;/*友元函数:分为两种第一种:普通函数作为类的友元函数
*/class Cat
{
public:Cat(string &name,int age) : m_name(name),m_age(age){cout<<"猫构造"<<endl;}~Cat(){cout<<"猫析构"<<endl;}friend void show(Cat *c);
private:string m_name;int m_age;
};void show(Cat *c)
{// 若不声明为友元函数时报错error: ‘std::string Cat::m_name’ is private within this contextcout<<"name="<<c->m_name<<endl;cout<<"age="<<c->m_age<<endl;
}int main()
{string name="Tom";Cat *c1=new Cat(name, 2);// 报错:error: cannot bind non-const lvalue reference of type ‘std::string&’Cat c2("Jerry", 3); show(c1);
}/*
执行结果: 猫构造name=Tomage=2
*/
示例代码:成员函数作为类的友元函数
#include <iostream>
using namespace std;/*友元函数:成员函数作为类的友元函数Dog有个成员函数,该成员函数想要访问/修改猫的私有成员变量
*///前向引用声明:告诉编译器有定义Cat这个类
//前向引用声明的缺陷:只能告知Cat类的存在,但是这个类具体有什么成员无法得知class Cat;class Dog
{
public:Dog(){cout<<"狗构造"<<endl;}~Dog(){cout<<"狗析构"<<endl;}void show(Cat &c);
};class Cat
{
public:Cat(string &name,int age){m_name=name;m_age=age;cout<<"猫构造"<<endl;}~Cat(){cout<<"猫析构"<<endl;}friend void Dog::show(Cat &c);  // 声明为友元函数private:string m_name;int m_age;
};void Dog::show(Cat &c)  // 定义为友元函数,可以访问Cat类的私有成员
{cout<<"name="<<c.m_name<<endl;cout<<"age="<<c.m_age<<endl;
}int main()
{string name = "小猫";Cat c(name,10);Dog d;d.show(c);
}/*
执行结果: 猫构造狗构造name=小猫age=10狗析构猫析构
*/

2.2 友元类

friend class 类名;
示例代码:友元类-某个类整体作为另外一个类的友元
#include <iostream>
using namespace std;/*友元类:某个类整体作为另外一个类的友元
*/class Dog;class Cat
{
public:Cat(string &name,int age){m_name=name;m_age=age;cout<<"猫构造"<<endl;}~Cat(){cout<<"猫析构"<<endl;}//声明狗这个类是猫的友元类(狗类要访问或修改猫的私有成员要猫承认是狗的"朋友")friend class Dog;
private:string m_name;int m_age;
};class Dog
{
public:Dog(){cout<<"狗构造"<<endl;}~Dog(){cout<<"狗析构"<<endl;}//狗里面的成员方法访问猫的私有成员void show(Cat &c){cout<<"name="<<c.m_name<<endl;cout<<"age="<<c.m_age<<endl;}//狗里面的成员方法修改猫的私有成员void setCat(Cat &c, string &newname,int newage){c.m_name=newname;c.m_age=newage;}
};int main()
{string name = "小猫";string newname = "大猫";Cat c(name,10);Dog d;//狗里面的成员方法访问猫的私有成员d.show(c);//狗里面的成员方法修改猫的私有成员d.setCat(c,newname,20);d.show(c);
}/*
执行结果: 猫构造狗构造name=小猫age=10name=大猫age=20狗析构猫析构
*/

3.特点

  • 友元不能继承,A是B的友元类,但是A的子类并不是B的友元类
  • 友元是单向的,A是B的友元,但是不能反过来
  • 友元不能传递,A是B的友元,B是C的友元,不能得出结论A是C的友元

缺点:
\quad 破坏了类的封装性

示例代码:普通函数作为类的友元函数写在类的里面
#include <iostream>
using namespace std;/*普通函数的代码写在类的里面
*/class Cat
{
public:Cat(string _name,int _age){name=_name;age=_age;}//声明show函数是猫的友元函数friend void show(Cat &other) //代码写在类的里面,是可以的,但是show依然是个普通函数{cout<<"猫的姓名: "<<other.name<<endl;cout<<"猫的年龄: "<<other.age<<endl;}
private:int age;string name;
};int main()
{Cat c1("旺财",5);show(c1);    
}
http://www.dtcms.com/wzjs/837435.html

相关文章:

  • 朝阳凌源网站建设石家庄定制网站建设
  • 网站建设 中企动力 东莞汕头建站模板系统
  • php网站开发技术前景摄影网站建设流程
  • 做网站建设的基本步骤做外贸电商网站
  • 网站运营和网络营销网页设计作品展
  • 黑猫会活动策划网站地方招聘网站如何做推广
  • 农家乐网站 建设专门做企业名录的网站
  • 浙江省建设诚信系统网站上海人才服务网官网
  • 图片展示网站php源码wordpress插件转php
  • wordpress 3.3.1东莞网络排名优化
  • 如何做网站价格策略wordpress 恶意注册
  • 网站内容设计主要包括wordpress 导入 乱码
  • 洛阳网站建设启辰网络服装网站建设策划书的基本结构
  • 网站死链修复wordpress不能注册
  • 江西网站开发怎么看wordpress数据库位置
  • 免费制作简历模板网站仙桃网站网站建设
  • 江门营销型网站建设公司网站建设策划方案t
  • 如何选择徐州网站开发上海建网站价格
  • 西安电子商务网站开发wordpress 创建数据库表
  • 建网站设计这样做网站推广
  • app取代网站网站 永久关停 请示
  • 平台网站建设多少钱河南城乡建设厅网站证书查询
  • 旅游网站建设流程怎么创建自己的购物平台
  • 石家庄+外贸网站建设公司引流推广犯法吗
  • app设计素材网站国家企业工商网查询
  • 下载的软件乱码怎么解决网站建设优化去哪学
  • 深圳做网站的淄博网站关键字优化
  • 大气蓝色律师网站phpcms模板东莞优化seo网站关键词优化
  • 换网站了吗网站开发寻找潜在客户的途径
  • 商城型网站建设代理加盟建网站做哪方面