首页 > 编程语言 >C++ primer 7.2 7.3笔记

C++ primer 7.2 7.3笔记

时间:2022-10-29 16:33:33浏览次数:55  
标签:const 函数 os Sales 7.2 7.3 primer data class

7.2 访问控制与封装

访问说明符:public,private
class和struct的区别:默认访问权限不一样,class默认所有成员是private,struct默认所有成员是public。

7.2.1 友元

类可以允许其他类或者函数访问它的非公有成员,通过令其他类或者函数(包括其他类的成员函数)成为它的友元。
声明函数作为友元,要增加一条friend关键字的函数声明。(声明只能出现在定义的内部)
友元关系不存在传递性。
友元的作用是影响访问权限,本身并非普通的声明。

class Sales_data{
    friend Sales_data add(const Sals_data&, const Sales_data&);
    public:
        Sales_data() = default;
    private:
        std::string bookNo;
        unsigned units_sold = 0;
}

封装的好处:

  1. 确保用户代码不会无意间破坏封装的对象的状态。
  2. 被封装的对象的类的具体实现可以很方便的改变(只看自己类内的逻辑),而不用调整用户代码。

7.3类的其他特性

等价:

typedef std::string::size_type pos
using pos = std::string::size_type

Sales_data item1; //默认初始化Sales_data类型的对象。
class Sales_data item1;

内联函数inline:inline成员函数应该与相对应的类定义在同一个头文件中。

可变数据成员mutable

class Screen{
    public:
        void some_member() const;
    private:
        mutable size_t access_ctr;
}
void Screen::some_member() const
{
    ++access_ctr; //记录调用次数
    // 其他操作
}

尽管some_member()是一个常量成员函数,它仍然可以改变access_str的值,该成员是个可变成员,所以任何成员函数都可以改变它的值。

可以基于const重载函数

class Screen{
    public:
        Screen &display(sd::ostream &os){
            do_display(os);
            return *this;
        }
        const Screen &display(std::ostream &os) const{
            do_display(os);
            return *this;
        }
    private:
        void do_display(std::ostream &os) const {os << contents;}
}

类的声明
class Screen;
前向声明,声明之后定义之前是一个不完全的类型。
声明之后定义之前:可以定义指向这种类型的指针或者引用,也可以声明(但不能定义)以它作为参数或返回值的函数。

标签:const,函数,os,Sales,7.2,7.3,primer,data,class
From: https://www.cnblogs.com/hy227/p/16838999.html

相关文章

  • C++ primer笔记 7.1 定义抽象数据类型
    7.1定义抽象数据类型structSales_data{std::stringbookNo;unsignedunits_sold=0;doublerevenue=0.0;std::stringisbn()const{returnboo......
  • 10.27.2
    #include<stdio.h>#include<math.h> intmain(){ inta; unsignedlonglongb,c; scanf("%d%llu%llu",&a,&b,&c); printf("%d\n",(b-a)/(c-1)); printf("%llu",c*......
  • 10.27.3
    #include<stdio.h>#include<math.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("%d%d%d%d",b%10,a/10,b/10,a%10); return0;}......
  • CentOS 7.2 源码安装 PostgreSQL 9.0
    安装PGSQLPGSQL源码地址:https://ftp.postgresql.org/pub/source/下载9.0版本源码[root@localhostsoft]#wgethttps://ftp.postgresql.org/pub/source/v9.0.0/postgres......
  • Android编译报错:Cannot resolve external dependency com.android.tools.build:gradle
    修改根目录的build.gradle增加 repositories配置,然后再File>SyncProjectwithGradleFiles,再执行Build>RebuildProjectbuildscript{ext{agp_versi......
  • 7.3 ElasticSearch运行机制之排序
    1.简介elasticsearch默认采用相关性算分排序,用户可以通过设定sort参数自行设定排序规则。2.query查询job字段为“Javaengineer”的文档,然后按照出生日期为第一排序字段、......
  • redhat7.2安装chrome
    如果最新版的不能安装,可以从这里下载老版本的http://orion.lcg.ufrj.br/RPMS/myrpms/google/亲测72版本安装成功。需要根据提示yum安装确实的依赖,我的是:yuminstallre......
  • C++Primer笔记
    数据类型类型转换当赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型所能表示数值的总数取模之后的余数,例如:8bit的unsignedchar可以表示0至255这256个......
  • CentOs 7 安装mysql(5.7.27)数据库
    CentOs7安装MySQL1.查看是否已经安装Mysql[root@srv01~]# rpm-qa|grepmysql# 如果你查看出来有东西,可以使用下面命令将其删除[root@srv01~]# ......
  • 如何在 Windows 上安装 ONLYOFFICE 文档 v7.2
    通过阅读本文,了解如何在Windows上安装ONLYOFFICE文档v7.2。引言使用社区版,您可以在本地服务器上安装ONLYOFFICE文档,并将在线编辑器与ONLYOFFICE协作平台​或其他热门系......