首页 > 代码库 > 极其重要的分析
极其重要的分析
#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 = http://www.mamicode.com/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 = http://www.mamicode.com/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 =http://www.mamicode.com/ 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
极其重要的分析
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。