c++ 临时对象
来源:互联网 发布:怪物之子知乎 编辑:程序博客网 时间:2024/06/15 12:21
/*-----------------------
Platform:WinXp + VC6
-----------------------*/
#include <stdio.h>
class CTemp
{
public:
int a;
int b;
public:
CTemp(CTemp& t){printf("Copy function!\n");a= t.a;b= t.b;};
CTemp(int m= 0,int n= 0);
virtual ~CTemp(){};
public:
int GetSum(CTemp ts);
};
CTemp::CTemp(int m, int n)
{
printf("Construct function!\n");
a = m;b=n;
printf("a = %d\n",a);
printf("b = %d\n",b);
}
int CTemp::GetSum(CTemp ts)
{
int tmp = ts.a+ ts.b;
ts.a= 1000; //此时修改的是tm的一个副本
return tmp;
}
//--------------Main函数-----------------
void main()
{
CTemp tm(10,20);
printf("Sum = %d \n",tm.GetSum(tm));
printf("tm.a = %d \n",tm.a);
}
--------------------------------------------------------
a = 10
b = 20
Copy function!
Sum = 30
tm.a = 10
int CTemp::GetSum(CTemp& ts)
{
int tmp = ts.a+ ts.b;
ts.a = 1000; //此时通过ts这个引用参考(refer to)对象本身
return tmp;
}
a = 10
b = 20
Sum = 30
tm.a = 1000
void main()
{
CTemp tm(10,20),sum;
sum = 1000; //调用CTemp(int m = 0,int n = 0)构造函数
printf("Sum = %d \n",tm.GetSum(sum));
}
-----------------------------------------------------------
a = 10
b = 20
Construct function!
a = 0
b = 0
Construct function!
a = 1000
b = 0
Sum = 1000
void main()
{
CTemp tm(10,20);
CTemp sum = 1000;
printf("Sum = %d \n",tm.GetSum(sum));
}
a = 10
b = 20
Construct function!
a = 1000
b = 0
Sum = 1000
#include<stdio.h>
class CTemp
{
public:
int a;
public:
CTemp(CTemp& t)//Copy Ctor!
{
printf("Copy Ctor!\n");
a = t.a;
};
CTemp& operator=(CTemp& t)//Assignment Copy Ctor!
{
printf("Assignment Copy Ctor!\n");
a = t.a;
return *this;
}
CTemp(int m= 0);
virtual ~CTemp(){};
};
CTemp::CTemp(int m)//Copy Ctor!
{
printf("Construct function!\n");
a = m;
printf("a = %d\n",a);
}
CTemp Double(CTemp& ts)
{
CTemp tmp; //构建一个临时对象
tmp.a = ts.a*2;
return tmp;
}
//-------------Main函数-----------------
void main()
{
CTemp tm(10),sum;
printf("\n\n");
sum = Double(tm);
printf("\n\nsum.a = %d \n",sum.a);
}
a = 10
Construct function!
a = 0
Construct function!
a = 0
Copy Ctor!
Assignment Copy Ctor!
sum.a = 20
CTempDouble(CTemp& ts)
{
return ts.a*2;
}
/*--------上面的代码相当于-------
CTemp _ret
void Double(CTemp& ts)
{
_ret.a = ts.a*2;
}
---------------*/
//---------Main函数-----------
void main()
{
CTemp tm(10);
printf("\n\n");
CTemp sum = Double(tm);
printf("\n\nsum.a = %d \n",sum.a);
}
a = 10
Construct function!
a = 20
sum.a = 20
- C++——临时对象
- c/c++-c++中的临时对象问题
- [C++_5]友元_临时对象
- 临时对象
- 临时对象
- 临时对象
- 临时对象
- 临时对象
- 临时对象
- 临时对象
- 临时对象
- [More Effective C++]条款十九:理解临时对象的来源
- [More Effective C++]条款十九:理解临时对象的来源
- (C/C++学习笔记)临时对象深入理解
- more effective c++(临时对象的返回值优化)
- More Effective C++----(19)理解临时对象的来源
- C++ 临时对象的创建与防止
- c/c++整理--静态成员和临时对象
- 一组照片,缅怀HP尚未面世的7寸平板TouchPad Go
- 【Linux菜鸟成长记(七)】Linux一些常用的基本命令
- 扩展字符,如将A-Z,扩展为ABCD......XYZ
- fib
- java.lang.UnsupportedOperationException at java.ut
- c++ 临时对象
- 整数转化为任意n进制的字符串
- JAVA编码规范
- oracle 存储过程和函数
- Java字符串的最大长度
- Postgresql 底层存储 页面布局
- wireshark 抓本地数据包
- C语言问题
- C#中动态创建一系列控件并初始化