ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++Primer 5th Chap7 Classes(未完)

2019-09-12 15:58:13  阅读:220  来源: 互联网

标签:const 函数 5th Sales Chap7 Primer data 成员 构造函数


this关键字

  在成员函数内部可以直接调用函数的对象的成员(类成员的直接访问看做是对this隐式引用,默认this指向非常量)

  例如:string isbn() const{return this->bookNo;}//这里const使得this可以指向常量,此处this指针表示指向“这个”对象(这里this可以省略)

编译器先编译成员的声明,然后编译成员函数体(所以即使类成员声明在函数之后,执行包含该成员的函数仍然可行)

若类的外部定义成员函数,且为常量成员函数,则在参数列表后的const不可省略,且必须包含所属类名:

  double Sales_data::avg_price() const{

    /*...................*/}

返回this对象的函数:

  例如:Sales_data& Sales_data::combine(const Sales_data &rhs){

      /*.......................*/

      return *this;}

类相关的非成员函数:不声明在类中但是应与类声明在同一头文件中

构造函数:无返回类型,可以在构造过程中给const成员写值,构造函数本身不能声明为const

  如果不自己写一个构造函数,系统自动生成一个不含参的默认构造函数(如果类不是那么简单,默认构造函数常常是不堪其用的)

  如果自己已经写了构造函数但仍然希望保留系统提供的默认构造函数:Sales_data()=default;(c++11)

  构造函数的初始化:

    1.初始值列表:Sales_data (const string &s,unsigned n,double p):bookNo(s),units_sold(n),revenue(p*n){ }每个成员对应一个初始值

    2.构造函数体:Sales_data (istream &is){

            read(is,*this);}//函数体内执行构造, 使用this把对象当做整体访问,这里使用*this将“this”对象作为实参传递给read函数

  当类需要分配类对象之外的资源时,默认的合成构造和析构函数不能满足要求(例如需要动态管理内存的程序)

访问控制

  定义在public之后:整个程序内可被访问

  定义在private之后:只有类的成员函数能访问该成员

默认struct在第一个定义权限的成员之前的成员是public

默认class在第一个定义权限的成员之前的成员是private(实际上除去此默认权限的区别,struct和class区别不大)

  友元(friend):使得其他类或者函数能够访问类的非public成员,只需在该类或函数定义之前加上friend关键字,注意只能出现在类定义的内部

          另外,在类之外需要再进行一遍函数声明(这里无需friend),与类保存在同一头文件中

除了数据和函数之外,类也可以自定义某种类型在类中的别名(如果想使用此别名,必须先定义后使用),如:

   public(或private):  typedef string::size_type st;(或using st=string::size_type)

定义在类内部的成员函数自动inline,也可以在类外部定义时手动inline(在定义处指定inline)

希望在const成员函数内能够修改数据成员:在此数据成员声明处之前加上mutable关键字,这样在const对象中其值仍然可改

  例如:mutable size_t ctr;

     调用:void MyClass::some_member()const{ ++ctr;}

 

标签:const,函数,5th,Sales,Chap7,Primer,data,成员,构造函数
来源: https://www.cnblogs.com/hfut-freshguy/p/11508655.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有