码迷,mamicode.com
首页 > 其他好文 > 详细

极其重要的分析

时间:2014-09-14 01:18:06      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   div   问题   sp   log   

#include <iostream>
using namespace std;

class a{
    public:
        a(){
            value ++;
            cout <<"default a"<<endl;
        }
        a(const a&){
            value ++;
            cout <<"const a"<<endl;
        }
        a operator=(const a& a1){
            cout <<"operator ="<<endl;
            return a(a1);
        }
        void f(){
            cout <<"value is "<<value <<endl;
        }
        ~a(){
            cout <<"~a"<<endl;
        }
    private:
        static    int value;
};

int a::value = 0;

void f1(a a1){
    a1.f();
    cout <<"f1"<<endl;
}

a f2(){
    cout <<"f2"<<endl;
    return a();
}

void f3(){
    a a1,a2;
    f1(a1);
    a2 = f2();
}


int main(){
    f3();
    return 0;
}

结果是

default a  f3内的a1调用构造函数
default a  f3内的a2调用构造函数
const a   f1内的的a变量以a1为参数调用构造函数
value is 3  此时有三个a对象了,所以value为3
f1      打印输出f1
~a      f1内的的局部变量退出了作用域,此时调用析构函数
f2      f2内打印输出f2
default a  f2调用默认构造函数
operator =  f2在f3内因为调用=这个运算符,所以才会打印输出
const a
~a
~a
~a
~a



这个其实有问题的,一般而言,有赋值的必须返回*this(=,+=,-=等等)

类似下面这个



#include <iostream>
using namespace std;

class a{
    public:
        a(){
            value ++;
            cout <<"default a"<<endl;
        }
        a(const a&){
            value ++;
            cout <<"const a"<<endl;
        }
        a& operator=(const a& a1){
            cout <<"operator ="<<endl;
            return *this;
        }
        void f(){
            cout <<"value is "<<value <<endl;
        }
        ~a(){
            cout <<"~a"<<endl;
        }
    private:
        static    int value;
};

int a::value = 0;

void f1(a a1){
    a1.f();
    cout <<"f1"<<endl;
}

a f2(){
    cout <<"f2"<<endl;
    return a();
}

void f3(){
    a a1,a2;
    f1(a1);
    a2 = f2();
}


int main(){
    f3();
    return 0;
}


  4 class a{
  5     public:
  6         a(int i):value(i){}
  7         ~a(){cout <<"~a"<<endl;}
  8         a& operator=(const a& a1){
  9             this->value = a1.value;
 10             return *this;
 11         }
 12         int get(){return value;}
 13     private:
 14         int value;
 15 };

最好的方法,=,+=,-=,等等这些符号绝对不能导致构造函数,

记住此时

a a1=10;

此时调用的是构造函数虽然用的符号是=这个符号,这一点必须高清晰

 

结果为

 

default a
default a
const a
value is 3
f1
~a
f2
default a

operator =
~a
~a
~a

 

 

极其重要的分析

标签:style   blog   color   io   os   div   问题   sp   log   

原文地址:http://www.cnblogs.com/ccccccccc/p/3970556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!