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

梁山县城市建设局网站seo详细教程

梁山县城市建设局网站,seo详细教程,网络广告设计制作,校园二手物品交易网站开发背景欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

欢迎阅读我的 【C++Primer】专栏

专栏简介:本专栏主要面向C++初学者,解释C++的一些基本概念和基础语言特性,涉及C++标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。希望对读者有帮助!

在这里插入图片描述
在这里插入图片描述

目录

  • 访问控制与封装
    • 使用class或struct关键字
    • 友元
    • 友元的声明

访问控制与封装

到目前为止,我们已经为类定义了接口,但并没有任何机制强制用户使用这些接口。我们的类还没有封装,也就是说,用户可以直达Sales_data对象的内部并且控制它的具体实现细节。在C++语言中,我们使用访问说明符(access specifiers)加强类的封装性:

  • 定义在public说明符之后的成员在整个程序内可被访问,public成员定义类的接口。
  • 定义在private说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private部分封装了(即隐藏了)类的实现细节。

再一次定义Sales_data类,其新形式如下所示:

class Sales_data{
public://添加了访问说明符Sales_data()=default;Sales & _data(const std::string&s,unsigned n,double p):bookNo(s),units_sold(n),revenue(p*n){}Sales_data(conststd::string&s):bookNo(s){}Sales_data(std::istream&);std::string isbn() const{ return bookNo;}Sales_data&combine(const Sales_data&);
private://添加了访问说明符double avg_price() const{return units_sold?revenue/units_sold:0;}std::string bookNo;unsigned units_sold=0;double revenue=0.0;
}

作为接口的一部分,构造函数和部分成员函数(即isbn和combine)紧跟在public说明符之后;而数据成员和作为实现部分的函数则跟在private说明符后面。

一个类可以包含0个或多个访问说明符,而且对于每个访问说明符能出现多少次也没有严格限定。每个访问说明符指定了接下来的成员的访问级别,其有效范围直到出现下一个访问说明符或者到达类的结尾处为止。

使用class或struct关键字

在上面的定义中我们迦做了一个微妙的变化,我们使用了class关键字而非struct开始类的定义。这种变化仅仅是形式上有所不同,实际上我们可以使用这两个关键字中的任何一个定义类。唯一的一点区别是,struct和class的默认访问权限不太一样。

类可以在它的第一个访问说明符之前定义成员,对这种成员的访问权限依赖于类定义的方式。如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public的;相反,如果我们使用class关键字,则这些成员是private的。

出于统一编程风格的考虑,当我们希望定义的类的所有成员是public的时,使用struct;反之,如果希望成员是private的,使用class。

使用class和struct定义类唯一的区别就是默认的访问权限

友元

既然Sales_data的数据成员是private的,我们的read、print和add函数也就无法正常编译了,这是因为尽管这几个函数是类的接口的一部分,但它们不是类的成员。

类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或者函数成为它的友元(friend)。如果类想把一个函数作为它的友元,只需要增加一条以friend关键守开始的函数声明语句即可:

class Sales_data{
//为Sales_data的非成员凶数所做的友元声明
friend Sales_data add(const Sales_data&,const Sales_Data&);
friend std::istream&read(std::istream&,Sales_data&);
friend std::ostream&print(std::ostream&,const_Sales_data&);
//其他成员及访问说明符与之前一致
public:
Sales_data()=default;
Sales_data(const std::string&s,unsigned n,double p):
bookNo(s),units_sold(n),revenue(p*n){}
Sales_data(const std::string&s):bookNo(s){}
Sales_data(std::istream&);
std::string isbn()const{return bookNo;】
Sales_data&combine(const Sales_data&);
private:
std::string bookNo;
unsigned units_sold=0;
double revenue=0.0;
// Sales_data接口的非成员组成部分的声明
Sales_data add(const Sales_data&,const Sales_data&);
std::stream& read(std::istream& ,Sales_data&)
std::ostream& print(std::ostream& ,const Sales_data&);

友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限。友元不是类的成员也不受它所在区域访问控制级别的约柬。

一般来说,最好在类定义开始或结束前的位置集中声明友元。


关键概念:封装的益处

封装有两个重要的优点:

  • 确保用户代码不会无意间破坏封装对象的状态。
  • 被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码。

一旦把数据成员定义成private的,类的作者就可以比较自由地修改数据了。当实现部分改变时,我们只需要检查类的代码本身以确认这次改变有什么影响;换句话说,只要类的接口不变,用户代码就无须改变。如果数据是public的,则所有使用了原来据成员的代码都可能失效,这时我们必须定位并重写所有依赖于老版本实现的代码,之后才能重新使用该程序。

把数据成员的访问权限设成prtvate还有另外一个威处,这么做能防止由于用户的厉因造成数据被破坏。如果我们发现有程序缺陷破坏了对象的状态,则可以在有限的范图内定位缺陷:因为只有实现部分的代码可能产生这样的错误。因此,将查错限制在有限范图内将能极大地降低维护代码及修正程序错误的难度。

尽管当类的定义发生改变时无须更改用户代码,但是使用了该类的源文件引须重新编译。

友元的声明

友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果我们希望类的用户能够调用某个友元函数,那么我们就必须在友元声明之外再专门对函数进行一次声明。

为了使友元对类的用户可见,我们通常把友元的声明与类本身放置在同一个头文件中类的外部。因此,我们的sales_data头文件应该为read、print和add提供独立的声明(除了类内部的友元声明之外)。

许多编译器并未强制限定友元函数必须在使用之前在类的外部声明。

一些编译器允许在尚无友元函数的初始声明的情况下就调用它。不过即使你的编译器支持这种行为,最好还是提供一个独立的函数声明。这样即使你更换了一个有这种强制要求的编译器,也不必改变代码。

http://www.dtcms.com/wzjs/182104.html

相关文章:

  • wordpress建立网站火蝠电商代运营公司
  • 一张图片网站代码百度电脑端网页版入口
  • 车都建设投资集团网站职业培训机构管理系统
  • 那个网站做兼职靠谱脚上起小水泡还很痒是怎么回事
  • 绥化做网站四川聚顺成网络科技有限公司
  • 上海市安全生产建设协会网站seo项目经理
  • 速冻蔬菜做哪个国际网站好百度广告联盟app
  • 广东省建设执业资格注册中心网站谷歌浏览器官网下载
  • 网站首页幻灯片不显示全网关键词指数查询
  • 做网站具体流程步骤线下推广方案
  • 网站版面布局结构抖音推广运营
  • 建立网站程序山西网页制作
  • 昆明城乡建设局网站徐州seo外包
  • 成都网站app开发seo经理
  • 怎么申请做网站靠谱的免费建站
  • 黄岐做网站搜索引擎优化是什么
  • 建站abc论坛全球网站流量查询
  • 西安做网站公司报价制作一个网站大概需要多少钱
  • 哈尔滨网站开发建设公司南宁seo结算
  • 医疗网站建设方案最近一周新闻热点大事件
  • 做美工用的网站做网页怎么做
  • 做网店去哪个网站货源好网络整合营销策划书
  • 长沙网站设百度关键词搜索热度
  • 网购网站模板百度搜索资源平台官网
  • 聊城做wap网站找谁电商培训班一般多少钱一个月
  • 公司用员工信息做网站域名备案网络零售的优势有哪些
  • 网站建设合同 简单江西seo推广
  • 四川住房和城乡建设网站清远网站seo
  • 公司网站建设制作全如何做个网站推广自己产品
  • 运营型网站b2b平台排名