accelerated c++ 读书笔记--第九章

来源:互联网 发布:hadoop for windows 编辑:程序博客网 时间:2024/06/18 12:11

1 、c++类型:内部类型(int\ char)、自定义类型(string、vector、stream)

2 、对于自定义类型:用户可以且必须直接操作数据元素

3、std::是限定名(头文件中必用,对应的源文件包含适当的using声明), using是声明,尽量减少必要的声明数量

4、定义类的成员函数:

     1 成员函数的名字是:student_info::read 而不是read ,其中::是作用域运算符;

     2 作为成员函数,student_info对象不需要座位参数传递,不需要定义student_info对象,

        但需要指明对象是哪一个,s.read();

     3 可以直接的访问对象的数据元素,尤其是在read函数定义的内部,不用指明是student_info的对象s;

     4  ::grade 中::是指grade的特定版本,且这个版本不是任何的成员函数,如果在定义成员函数时,  

      对引用与成员函数同名的外部函数时必须加::,否则将会认为是成员函数

    5 调用成员函数时,其对应的成员不能作为参数,因此无法const,但是可以在定义成员函数时,

       在()后面加const,使整个函数成为const,即函数不改变调用的对象

5、对常量对象不能调用非常量函数,这不是废话吗

6、函数定义和声明时的参类型必须相同,有const都有

7、函数会改变一个对象的状态,则它应该作为这个对象的成员;(有些疑问

8、定义成员函数不需要(仍可以访问)数据元素,通过成员函数就可以作用于数据。

9、数据隐藏:公有的谁都可以访问,私有的对于了类型用户不可以访问。

                       其中类型中grade和read是公有的,而mid、name是私有的

10、自己定义新类型的用class来标注类型,其中可以任意顺序且不限次数的显示保护标识一个成员的可访问性,

         包括:private、public

      例如

              

11、 struct和class的区别:第一个保护标识前的成员,两种类型的缺省保护方式不同,

        class:第一个标识符前的元素是private

        struct:第一个标识符前的元素是public

        struct也可以用保护标识符

12、用struct or class :

        struct:保留结构--简单类型--公开数据结构

        class:控制对成员函数的访问

        (struct也可以保护标识符,也可以控制呀?)

13、struct  class区别

       

1、class是引用类型,struct是值类型;

2、class可以继承类、接口和被继承,struct只能继承接口,不能被继承;

3、class有默认的无参构造函数,有析构函数,struct没有默认的无参构造函数,且只能声明有参的构造函数,没有析构函数

4、class可以使用abstract和sealed,有protected修饰符,struct不可以用abstract和sealed,没有protected修饰符;

5、class必须使用new初始化,结构可以不用new初始化;

6、class实例由垃圾回收机制来保证内存的回收处理,而struct变量使用完后立即自动解除内存分配

7、从职能观点来看,class表现为行为,而struct常用于存储数据;

8、作为参数传递时,class变量以按址方式传递,而struct变量是以按值方式传递的。---引用吕明的百度回答

9、

struct A
{
  char a;
};
struct B : A
{
  char b;
 };

这个时候B是public继承A的。

  如果都将上面的struct改成class,那么B是private继承A的。这就是默认的继承访问权限。


     两者的使用区别:

    struct:相对简单一些的对象

     c lass:空间有限,对象量大、复杂、多级别

14、存取器函数:用这样的函数来允许对被隐藏起来的函数进行简单的访问(一般是读),例如name()p170

15、定义类的接口都应该在同一个头声明,同一个源定义,例如偏p170中的compare

16、构造函数属于成员函数,是对象初始化的方式,不需要人为调用,创建对象时可以自动调用

        构造函数的名称和类的名称相同,且没有返回值

        可以构造多个构在函数,每个的参数个数和类型不同

         若没有定义构造函数,编译程序将自动合成一个,至于初始化的结果,则是根据对象的创建方式而定

         缺省初始化:局部变量--即初始化为空,但是内部类的局部变量则没有隐含初始化的形式

         数值初始化:1 对象用来初始化一个容器的元素

          2 定义一个有特定长度的容器,对象是这个容器的元素

         3 为映射表添加一个新元素,对象是这个动作的副作用

         关于构造函数:1 自定义类型有多个构造函数,合适的构造函数将完全控制对象的初始化,一个就够了

            2  内部类型,数值初始化为0,缺省初始化为未定义的值

    3  未定义任何构造函数的自定义类型,对象的数值/缺省初始化类型将作用到其数据成员上

                                      但是,若有一个数据成员属于一种具有构造函数的i 定义类型,则初始化将递归

17、应该确保任何数据成员,在任何时候都有有意义的值

       对于未定义的值,除了读,其他任何操作都是不合法的

18、构造函数

        声明:

        public:

                  Student_info (    );   缺省构造函数

                  Student_info(std::stream&);从流中读入

         

        定义:

                 Student_info::Student_info(    ):   midterm(0)  ,final(0) {  }

构造函数初始化程序:用给定值初始化特定成员

  Student_info::Student_info(  istream& is ): { read(is); }

19、创建一个新的类对象:

               1 分配内存保存对象

                2 按照构造函数进行初始化

                3 执行构造函数的函数体

        所有数据成员都被初始化了,构造函数才能结束

20、成员函数可以类内定义,比较省空间,也可以类外定义,必须指明其作用域 class_name::

21、成员初始化的顺序是声明的顺序,因此用一个类成员给另一个初始时很危险,尽量避免相互依赖,在构造函数的函数体进行初始化,而不是在初始化程序中

22、struct和class后面都除了以函数体结尾的,其余后面都要加“;”

23、课后习题9-2:将compare函数中的const和&去掉

        因为:全局中同一个元素必须const保持一致,有责全有,无责全无,包括对象,和&

24、触发异常:报错的情况即可

        catch异常:try{触发异常}catch{cout<<e.what<<endl;

25、对于成员函数,在源文件中用::指定类作为作用域,在主函数文件中用  对象名.+成员函数名





         

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁宝宝拉蛔虫怎么办 吃了长蛆的东西怎么办 被蜱虫咬了又找不到虫子怎么办 木家具生黑虫子怎么办 吃了发霉的面包怎么办 种的韭菜有蛆怎么办 活狗身上长蛆虫怎么办 狗身上会有蛆虫怎么办 狗身上长满了蛆怎么办 房间墙上有很多小虫子怎么办 床上有许多小虫子怎么办? 店里有许多小虫子怎么办 房间潮湿有很多小虫子怎么办 家里潮湿墙上发霉长小虫怎么办? 房间有小飞虫子怎么办 狗被灭虫剂喷了怎么办 吃鸡玩久了手机屏幕很涩怎么办 超东卧室太阳晒怎么办 床头上的布破了怎么办 老年机全静音了怎么办 老年机手机不亮怎么办 70岁老人耳朵聋怎么办 血压太低了头晕怎么办 血压高忽然变低怎么办 血压高眼睛红了怎么办 高血压200降不下去.怎么办 高血压吃药降不下来怎么办 合肥房子卖了户口怎么办 吃了粽子胃难受怎么办 突然血压高怎么办需要吃药吗? 胃一阵阵疼然后拉肚子怎么办 橱子和墙壁不平怎么办 复印选项是英文不认识怎么办 防盗门锁与门框结合不好怎么办 仿瓷涂料墙壁脏了怎么办 油笔画到墙纸上怎么办 水笔画在墙纸上怎么办 屋里有股石灰味怎么办 厨房太阳对着晒怎么办 房子有太阳西斜怎么办 房子晒到太阳很热怎么办