zoukankan      html  css  js  c++  java
  • 5--三大函数

     (1)类的构造函数
    构造函数是特殊的成员函数,只要创建了类类型的对象,都要执行构造函数
    构造函数的目的是保证每个对象的数据成员都有合适的初始值。
     
    构造函数是特殊的成员函数,与其他成员函数不同,构造函数和类同名,而且没有
    返回类型。一个类可以有多个构造函数,每个构造函数必须有与其他构造函数
    不同数目或者类型的形参。
     
    在创建对象的时候,编译器会自动调用构造函数,不需要用户调用
     
    如果没有为一个类定义任何的构造函数,那么在初始化的时候会调用默认构造函数。
    默认构造函数由编译器生成,为所有的数据成员提供初始化。默认构造函数没有任何参数。
    但是如果一个类一旦定义了构造函数,那么编译器就不再提供任何默认构造函数
     

     
    (2)构造函数的初始化列表
    构造函数和其他的函数一样,具有函数名称、形参表和函数体。与其他函数不同的是,
    构造函数也可以包含一个构造函数初始化列表。
    构造函数初始化列表紧跟在构造函数的后面,以一个冒号开始,接着是一个以逗号分隔
    的数据成员列表,每个数据成员后面跟一个放在圆括号中的初始化式。
    Employee::Employee():garde(0),salary(0)        //构造函数的初始化列表
    {
    }
    Empoyee::Employee()                           
    {
        garde=0;
        salary=0;
    }
    上面两种方法是有区别的:
    第一种对每个变量只有一次初始化。
    后一种方法则是先用默认值初始化,然后又赋一个值,也就是说进入构造函数之前已经完成了初始化。
     
    使用初始化列表时候,有一些需要注意的地方:
    • 不是所有的数据成员都必须出现在初始化列表中
    • 初始化列表中每个成员只能出现一次,不可以重复初始化
    • 数据成员在初始化列表中出现的顺序与类中定义顺序无关
     
     

     
    (3)复制构造函数
    类的构造函数可以方便的为类指定初始值,当用一个现有对象来创建新的对象的时候
    就需要使用到复制构造函数。
     
    如果在类中不自定义复制构造函数,编译器会用位复制来执行上面的过程。
    Employee emp1("mike",23,7000);
    Employee emp2=emp1;
    但是对于一些包含指针数据成员的类,位复制的时候只会复制这个指针,
    两个指针指向同样的地址,后面的对象依赖前面的对象。也就是浅拷贝。
     
    在C++中,可以用自己定义的函数来代替位复制,这个函数就是复制构造函数。
    复制构造函数是一个特殊的构造函数,该函数接收一个本类型的引用作为参数,
    参数数目只能有一个。通过使用复制构造函数,可以用一个现有的类对象来创建
    一个新的类对象。
    claas Employee
    {
        public:
            Employee(const Employee &E)           //一定是本类型的引用
    }
     
    在下面三种形式下,编译器会调用复制构造函数:
    1. 在定义类对象的时候直接用其他类对象初始化,比如前面的 Empoyee emp2=emp1;
    2. 调用函数的时候。如果函数的类型是类类型,且没有定义为引用,这个函数的参数是值传递
    3. 在函数返回的时候。如果函数的返回类型是类类型,且没有定义为引用。


     
    (4)类的析构函数
    在释放对象的时候会调用析构函数。析构函数也是类中一个特殊的成员函数。
    当对象脱离其作用域的时候,系统会自动执行析构函数。
    析构函数往往是用来做"清理善后"的工作。例如在建立对象时用new开辟一片
    内存空间,应在退出程序前在析构函数中用delete释放。
     
    析构函数使用波浪线"~"加类名作为函数名,没有返回类型,没有参数。
    一个类可以有多个构造函数,但是只能定义一个析构函数。
     
    如果没有为类定义析构函数,那么编译器也会自动添加一个析构函数,不过这个由编译器
    添加的析构函数不进行任何操作。如果有一些需要自己手动释放的东西,如指针或者打开
    的文件等,就一定需要定义析构函数。
     
     
     





  • 相关阅读:
    android 手把手教您自定义ViewGroup(一)
    mac下tomcat的安装与配置
    jarsigner签名报错Invalid keystore format
    android上引入七牛 上传图片或者文件 最终整理版本(可用)
    viewpage listview gridview加载本地大图多图OOM处理办法
    android TextView 文字垂直的设置
    javascript技巧之实现add方法无限调用
    jQuery源码分析之ready方法
    jQuery源码分析之Callbacks方法
    jQuery源码分析之extend方法
  • 原文地址:https://www.cnblogs.com/gt123/p/3448095.html
Copyright © 2011-2022 走看看