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
    
  • 相关阅读:
    商贸通帐套隐藏方法
    固定资产打开提示:上年度数据未结转!
    ZOJ 2432 Greatest Common Increasing Subsequence
    POJ 1080 Human Gene Functions
    POJ 1088 滑雪
    POJ 1141 Brackets Sequence
    POJ 1050 To the Max
    HDOJ 1029 Ignatius and the Princess IV
    POJ 2247 Humble Numbers
    HDOJ 1181 变形课
  • 原文地址:https://www.cnblogs.com/2002ljy/p/12251837.html
Copyright © 2011-2022 走看看