C++类和对象1--四个默认函数+运算符重载

来源:互联网 发布:hadoop需要java基础吗 编辑:程序博客网 时间:2024/06/05 18:05

1:整理类和对象的基础知识,如类的定义,访问限定符,面向对象封装性,对象的大小计算等等。

     对象指的的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性

     类的三大特性:封装、继承、多态。

                                                                            

    C++程序中通常使用访问控制符来保证自身属性的可见性,常见的三个访问限定符:
      public(公有)protected(保护)private(私有)
    (1)public成员可从类外部直接访问,private/pritected成员不能从类外部直接访问。
    (2)每个限定符在类体中可使用多次,它的作用御是从该限定符出现到下一个限定符之前或类体结束前。
    (3)类体中如果没有定义限定符,则默认为私有的。
    (4)类的访问限定符体现了面向对象的封装性。

    作用域:局部域、全部域、类域、名字空间域

     (1)每个类都定义了自己的作用域、类的成员(成员函数/成员变量)都在类的这个作用域内,成员函数可任意访问成员变量和其他成员函数。

      (2)对象可以通过.直接访问公有成员,指向对象的指针通过->也可以直接访问对象的公有成员。

      (3)在类体外定义成员,需要使用::作用域解析符指明成员属于哪个类域,如Student::average()时,表示我们访问的average()方法属于Student类。

                                                                                   

     类实例化对象
   (1)类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它。
   (2)一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间存储类成员变量
   (3)实例化出的对象才能实际存储数据,占用物理空间

                                                                  

 每个对象的大小为类中所有成员变量的大小之和,且遵守内存对其原则

2:整理四个默认成员函数及运算符重载相关知识 

      类的四个默认成员函数:构造函数,拷贝构造函数,析构函数,运算符重载函数。  

     (1)C++提供了构造函数来处理对象的初始化,构造函数是一种特殊的成员函数,与其他成员成员函数不同,不需要用户来调用它,而是在调用对象时自动执行。

               构造函数的名字必须与类名相同,而不能随意命名,以便编译系统能识别它并把它作为构造函数处理,它不具有任何类型,不返回任何值。

     (2)拷贝构造函数

               创建对象时使用同类对象来进行初始化,这时所用的构造函数称为拷贝构造函数,拷贝构造函数是特殊的构造函数

               特征:

                          拷贝构造函数其实是一个构造函数的重载

                          拷贝构造函数的参数必须使用引用传参,使用传值方式会引发无穷递归调用

                          若未显示定义,系统会默认缺省的拷贝构造函数。缺省的拷贝构造函数会,依次拷贝类成员进行初始化。

                                           

            当某对象是按值传递时(无论是作为函数参数,还是作为函数返回值),编译器都会先建立一个此对象的临时拷贝,而在建立该临时拷贝时就会调用类的拷贝构造函数。

            深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝,浅拷贝资源后在释放资源的时候会产生资源归属不清的情况导致程序运行出错。一定要注意类中是否存在指针成员。

      (3)析构函数

            当一个对象的生命周期结束时,C++编译系统会自动调用一个成员函数,这个特殊的成员函数即析构函数(destructor)

            类的析构函数是类的一种特殊的成员函数,析构函数的名称与类的名称是完全相同的,只是在前面加了取反运算符(~)作为前缀,它不会返回任何值,也不能带有任何参数。

            析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作使之可以被重新分配给新对象使用。 析构函数不仅在跳出程序(比如关闭文件、释放内存等)前释放资源,它还可以被用来执行“用户希望在最后一次使用对象之后所执行的任何操作”。

            析构函数不返回任何值,没有函数类型,也没有函数参数。由于没有函数参数,因此它不能被重载。一个类可以有多个构造函数,但只能有一个析构函数。

      (4) 运算符重载  

               为了增强程序的可读性,C++支持运算符重载。

               5个C++不能重载的运算符:  .*/::/sizeof/?:/.

               运算符重载特征:      
                   operator+ 合法的运算符 构成函数名(重载<运算符的函数名:operator< )。 

                   重载运算符以后,不能改变运算符的优先级/结合性/操作数个数。

                                                          

3:整理隐含的this指针等等,及对运算符重载背后做的事情。

       this指针:在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this。它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。this指针是隐式使用的,它是作为参数被传递给成员函数的。

       运算符重载:如果将运算符重载函数作为成员函数,它可以通过this指针自由的访问本类的数据成员,因此可以少写一个函数的参数

                 


阅读全文
0 0
原创粉丝点击