zoukankan      html  css  js  c++  java
  • C++基础(五)

    一、构造函数

      1.C++的对象模型和C的结构体模型没有任何区别,包括成员的布局以及对齐补齐的规则。

      2.对象中只有成员变量,没有成员函数。类的成员变量在该类的每个对象中都有一份独立的拷贝,但是类的成员函数只有一份,且为该类的所有对象共享。

      3.为了在一个函数中区分不同的调用对象,编译器会为每个成员函数提供一个隐藏的指针参数——this指针,指向调用该成员函数的对象。在成员函数中对所有成员变量的访问以及对其他成员函数的调用,实际上都是通过this指针完成的。

      4.类的构造函数中同样具有this指针参数,指向这个正在被构造的对象。

      5.显示使用this指针的场合

        (1)解决成员变量的名字冲突

        (2)从成员函数中返回调用对象的自引用

        (3)通过成员函数实现对象间的交互

        (4)在成员函数中销毁调用对象自身

    二、常函数

      1.在类成员函数的参数表之后,函数体的左花括号之前,加上const关键字,该成员函数的this指针具有常属性,这样的成员函数称为常函数。

      2.在常函数内部,因为this指针被声明常量指针(即目标只读的指针),因此无法修改成员变量的值,除非该成员变量被mutable关键字修饰。

      3.常对象只能调用常函数,非常对象既可以调用非常函数也可以调用常函数。原型相同常函数和非常函数可以构成重载关系。

    三、析构函数

      1.析构函数是类的特殊的成员函数

        (1)析构函数的函数名就是在类名前面加“~”

        (2)析构函数没有返回类型

        (3)析构函数没有参数

        (4)析构函数不能重载

      2.析构函数在对象被销毁时自动调用

        (1)局部对象的析构函数由其所在最小作用域的右花括号调用

        (2)堆对象的析构函数被delete运算符调用

        (3)全局对象的析构函数被进程加载器调用  

      3.缺省析构函数

        如果一个类没有定义析构函数,编译器会提供一个缺省析构函数。该函数对于基本类型的成员变量,什么也不做;而对于类类型的成员变量,则会调用其相应类型的析构函数。

    四、拷贝构造和拷贝赋值

      1.缺省的拷贝构造和拷贝赋值,对包括指针在内的基本类型成员变量按字节复制,导致浅拷贝问题。

      2.为了获得完整意义上的对象副本,必须自己定义拷贝构造函数和拷贝赋值运算符函数,针对指针型的成员变量做深拷贝。

      3.拷贝赋值运算符函数的实现

        (1)避免自赋值

        (2)分配新资源

        (3)释放旧资源

        (4)拷贝新内容

        (5)返回自引用

  • 相关阅读:
    2D ARPG开发之旅(1) 贴图(tilebased)地图的实现(上)贴图修改版
    Microsoft CRM 2011 出现“无法更改域登录名" 错误
    Microsoft CRM 2011 隐藏文件菜单中的”新建活动“菜单
    Microsoft CRM 2011 安装时出现“Could not find GUID for server, Global Catalog not found in forest xxx”的问题
    C#(面向对象)
    delegate(委托)
    ww
    SQL(存储过程,触发器,回滚)
    sss
    EXcel
  • 原文地址:https://www.cnblogs.com/csqtech/p/7067304.html
Copyright © 2011-2022 走看看