zoukankan      html  css  js  c++  java
  • c++学习记录(六)

    类型转换函数

    • 目的:实现类型的自动转换
    • 只有一个参数,而且不是复制构造函数的构造函数,一般可看做转换构造函数
    • 当需要时,编译系统会自动调用转换构造函数,建立一个无名的临时对象(或临时变量)

    - 示例

    class A{
    public:
    double real,imag;
    A(int i){  //(1)类型转换构造函数
    cout<<"called"<<endl;
    real=i;imag=0;
    }
    A(double r,double i){
    real=r;imag=i;}//(2)构造函数
    };
    int main()
    {
    A c1(7,8);//调用(2),此时c1={7,8}
    A c2=12;//调用(1),此时c2={12,0}
    c1=9;//调用(1),9被自动转换成一个临时A对象,此时c1={9,0}
    cout<<c1.real<<","<<c1.imag<<endl;
    return 0;
    }
    

    析构函数

    • 名字与类名相同,在前面加~,没有参数和返回值,一个类最多只有一个析构函数
    • 析构函数在对象消亡时即自动被调用,做一些善后工作,比如释放内存之类
    • 如果定义类时没写析构函数,则编译器生成缺省析构函数,缺省析构函数什么也不做
    • 如果定义了析构函数,则编译器不生成缺省析构函数

    - 对象数组生命期结束时,对象数组的每个元素的析构函数都会被调用

    class test{
    pulic:
    ~test(){
    cout<<"called"<<endl;}
    };
    int main(){
    test array[2]//两个元素
    cout<<"end main"<<endl;
    return 0;
    }
    
    • 输出:
    end main
    called
    called
    

    - new出来的空间,不delete就不会消亡

    - 析构函数和运算符delete

    • delete 运算导致析构函数调用
    test *ptest;
    ptest=new test;//构造函数被调用
    delete ptest;//析构函数被调用
    
    ----
    
    ptest=new test[3];//构造函数被调用3次
    delete []ptest;//析构函数被调用3次
    
    • 若new一个对象数组,用delete释放时应写[],否则只delete一个对象(调用一次析构函数)

    -析构函数在对象作为函数返回值返回后被调用

    class A{
    public:
    ~A(){
    cout<<"destructor"<<endl;}
    };
    A obj;//3.整个程序结束后,全局变量消亡
    A fun(A sobj){//1.参数对象消亡(形参消亡)
    return sobj;}
    int main(){
    obj=fun(obj);//2.函数调用返回值(临时对象)被用过后消亡
    return 0;
    }
    
    • 输出:
    destructor//1
    destructor//2
    destructor//3
    
  • 相关阅读:
    eclipse
    一次性验证码
    mybatis。逆向工程
    mybatis02.动态sql
    mybatis01
    plsql
    HDU.2149 Public Sale (博弈论 巴什博弈)
    HDU.1846 Brave Game (博弈论 巴什博弈)
    博弈论快速入门
    HUD.2795 Billboard ( 线段树 区间最值 单点更新 单点查询 建树技巧)
  • 原文地址:https://www.cnblogs.com/2002ljy/p/12251837.html
Copyright © 2011-2022 走看看