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

网站开发免费视频播放器潍坊住房公积金

网站开发免费视频播放器,潍坊住房公积金,做交易平台的网站需要哪些技术,北海 网站建设这里写目录标题 静态类成员友元友元方法 静态类成员 类成员一般都需要通过对象来访问&#xff0c;不可以通过类名直接访问&#xff0c;但是当我们将类成员定义为静态类成员&#xff0c;则允许使用类名直接访问。 静态类成员是在类成员前定义static关键字。 1 #include<iost…

这里写目录标题

  • 静态类成员
  • 友元
  • 友元方法

静态类成员

类成员一般都需要通过对象来访问,不可以通过类名直接访问,但是当我们将类成员定义为静态类成员,则允许使用类名直接访问。
静态类成员是在类成员前定义static关键字。

  1 #include<iostream>2 using namespace std;3 class Cbook4 {5     public:6        static int price;7 };8 int Cbook::price = 410;9 int main()10 {11     Cbook cbook;12     cout<<"Cbook in"<<Cbook::price<<endl; //通过类名直接访问类成员13     cout<<"Cbook use"<<cbook.price<<endl;//通过对象访问静态类成员14 15 16     return 0;17 }

注意:在定义静态类成员时,通常需要在类体外部对静态类成员进行初始化。
静态类成员是被所有的类共享的,无论定义多少个类对象。类的静态类成员只有一份,同时,如果一个对象修改了静态类成员,那么其他对象的静态类成员也将改变(修改的是同一个静态类成员)

静态类成员可以是当前类的类型,其他数据类成员只能是当前类的指针或应用类型,在定义类成员时,对于静态类成员,其类型可以是当前类的类型,而非静态类·成员则不可以,除非数据成员的类型为当前类的指针或引用类型。

  8 class CBOOK9 {10     public:11         static int price;12     //    CBOOK cbook;错误,非法定义13         static CBOOK cook;14         CBOOK *cbook;15 };

静态类成员可以作为成员函数的默认参数,在定义类的成员函数时,可以为成员函数指定默认参数,其参数的默认值也可以是类的静态类成员,但是不同的数据成员不能作为成员函数的默认参数。

类的静态成员函数只能访问类的静态成员,而不能访问普通的数据成员。
而且静态类成员函数不能定义为const成员函数,如果函数的实现代码位于类体之外,则在函数的实现部分不能再标识static关键字。

友元

友元概述
友元是使用friend关键字, 让特定的函数或者别的类的所有成员函数对私有数据成员进行读写。
好处是:可以保持数据的私有性,又可以让特定的类或者函数直接访问私有成员。
为了提升效率,友元可以让普通函数直接访问一个类的保护或私有数据成员,但是如果没有友元机制,就只能将类的数据成员声明为公共的,从而任何函数都可以无约束地访问它。
友元函数:

1 #include<iostream>2 using namespace std;3 class Friendfunction4 {   5     public:6         Friendfunction()7         {8             m_height = 0;9             m_width = 0;10         }11         Friendfunction(int height,int width)12         {13          m_width = width;14          m_height = height;15         }16         int getHeight()17         {18             return m_height;19         }20         int getWidth()21         {22             return m_width;23         }24         friend int friendfunction(Friendfunction &myret);25         protected:26         int m_height;27         int m_width;28 };29 int friendfunction(Friendfunction &myret)30 {31     return myret.m_height*myret.m_width;32 }33 int main()34 {35     Friendfunction ff(120,210);36     cout<<"result = "<<friendfunction(ff)<<endl;37 38     return 0;39 }

在函数friendfunction中可以直接使用Friendfunction类对象中的数据成员,就是因为第24行代码的作用:

 24         friend int friendfunction(Friendfunction &myret);

此例子既很好的保护隐藏了数据,又可以使外界的特定函数直接访问这些隐藏数据。

接下来介绍友元类
就如下面第14行代码所示 : friend class Clist; 就可以声明友元类啦。用法和功能与友元函数用法功能类似。这里就不再详细赘述了,直接看代码:

  1 #include<iostream>2 #include<string>3 using namespace std;4 class Cltem5 {6     private:7         string m_name;8         void outputname()9         {10             cout<<"name = "<<m_name<<endl;11             12         }13     public:14        friend class Clist;15         void setltemname(string name)16         {17            m_name= name;18         }  19 };      20 class Clist21 {22     private:23         Cltem m_ltem;24     public:25         void outoutltem();26 };27 void Clist::outoutltem()28 {29     m_ltem.setltemname("beijing");30     m_ltem.outputname();31 }32 int main()33 {34     Clist list;35     list.outoutltem();36 37     return 0;38 }

定义Cltem类时,使用了friend关键字将Clist类定义为Cltem类 的友元,这样一来,Clist类中的所有方法都可以访问Cltem类中的私有成员了。

友元方法

在我们真正开发程序时,有时候需要控制一个类对当前类的私有成员的发法。比如,我们需要实现只允许Cbook类中的某个成员来访问·Clibrary类的私有成员,而不允许其他成员函数访问Clibrary类的私有数据,这可以通过定义友元函数来实现。在定义Clibrary类的时候,可以将Cbook类的某个方法定义为友元方法,这样就限制了只有该方法允许访问Clibrary类的私有成员。

1 #include<iostream>2 using namespace std;3 class Clibrary;4 class Cbook5 {6     public:7         Cbook();8         ~Cbook();9         Clibrary *position;10         void putcbook(); //声明友元11         //void notfriendcbook();//不声明友元,作为对比12 };13 class Clibrary14 {15     friend void Cbook::putcbook();16     private:17     string name;18     void putname()19     {20         cout<<"name = "<<name<<endl;21     }22     public:23     void setname(string name);24 };25 void Clibrary::setname(string name)
26 {   27     this->name = name;28 }29 void Cbook::putcbook()30 {   31     position->setname("beijing");32     position->putname();33 }  /*34 void Cbook::notfriendcbook()35 {36     position->setname("beijing");37     position->putname();38 }*/39 Cbook::Cbook()40 {41     position = new Clibrary();42 }43 Cbook::~Cbook()44 {45     delete position;46    position = NULL;47 }48 49 int main()50 {51     Cbook cook;52     cook.putcbook();53 54    // cook.notfriendcbook();55     return 0;56 }

就像上面代码所示,如果把没有声明友元的成员函数放开,就会出现下面这样的错误。

[bsk@localhost c++]$ g++ friendmethod.cpp 
friendmethod.cpp: In member function ‘void Cbook::notfriendcbook()’:
friendmethod.cpp:18:10: error: ‘void Clibrary::putname()’ is privatevoid putname()^
friendmethod.cpp:37:23: error: within this contextposition->putname();

原因也很简单,就是因为notfriendcbook()成员函数不是Clibrary类的友元,所以这个成员函数就不能访问去访问Clibrary类中的私有属性。
此外,全局函数也可以作为类友元,一样可以访问类中的私有成员。

最后简单来谈一下
友元函数在访问类对象中的成员时,不需要通过对象名。友元函数没有this指针,如果不通过对象名就无法找到类对象中的非static成员,也就无法访问。但是当访问类对象中的static成员时,就可以不用通过对象名访问。

http://www.hkea.cn/news/773765/

相关文章:

  • php商城网站建设多少钱天津百度seo排名优化
  • 注册网站免费注册insseo关键词优化推广哪家好
  • 深圳房地产网站开发常见的网络营销工具有哪些
  • .net 网站管理系统湖南企业竞价优化首选
  • 南山区住房与建设局官方网站网络赚钱推广
  • wordpress mycred汉化seo引擎搜索入口
  • 在线教育网站用什么做百度搜索的优势
  • 甘肃省住房城乡建设厅网站首页智能建站模板
  • 智能科技网站模板下载地址百度学术论文查重
  • 网站要怎么做才能让360收录推广品牌的策划方案
  • 做网站前景营销课程培训视频
  • 青海做网站广告开户南京seo
  • wordpress写软文赚钱seo快速培训
  • 南宁网站建设接单陕西省人民政府
  • wordpress网站价格seo域名综合查询
  • 支付网站怎么做的网络自动推广软件
  • js做网站统计品牌关键词优化
  • 微信公众号管理平台官网谷歌seo建站
  • 鲜花购物网站源码企业网站营销的优缺点
  • 表白网站制作在线日照网站优化公司
  • 企业网站建设策划书 前言徐州关键词优化排名
  • 一级a做爰片视频网站全国新闻媒体发稿平台
  • 唐山网站建设哪家专业高德北斗导航
  • wordpress 地址 .html企业网站seo贵不贵
  • 提供网站制作公司哪家好网络软文范文
  • 做原型网站枣庄网络推广seo
  • 品牌网站开发设计外贸网站平台
  • 网站做留言板网站推广在线
  • 长春服务好的网络营销seo网站推广的主要目的
  • 搜索引擎优化和关键词竞价广告的区别宿州百度seo排名软件