红梅社区:有没有c++强人啊!请进

来源:百度文库 编辑:高校问答 时间:2024/05/07 06:20:28
#include <iostream>
#include <string>
using namespace std;

class Test
{
public:
Test(int a)
{
kk=a;
cout<<"构造参数a:"<<a<<endl;
}
public:
int kk;
};

void fun_t(int n)
{
static Test a(n);
//static Test a=n;//这么写也是对的
cout<<"函数传入参数n:"<<n<<endl;
cout<<"对象a的属性kk的值:"<<a.kk<<endl;
}
Test m(100);
void main()
{
fun_t(20);
fun_t(30);
cin.get();
}
看看程序的是输入结果撒!
我觉得应该是:
100
20
20
20
20

我不是高手,这是我在vc内试出的答案

构造参数a:100
****************
构造参数a:20
函数传入参数n:20
对象a的属性kk的值:20
函数传入参数n:30
对象a的属性kk的值:20

分析分析就可以了。

构造参数a:100
解释:fun_t定义后面的那个Test m(100);,m是全局变量,首先初始化了

构造参数a:20
函数传入参数n:20
对象a的属性kk的值:20
解释:fun_t的那个a是static的,也就是函数退出了,它也不销毁,所以第二次调用它,就不用再执行构造函数了。你注释掉的static Test a=n;也可以,是因为编译器会找你有没有定义一个以int型为参数的构造函数,如果有就用这个构造函数;如果你把Test类的构造函数声明为explicit的(前面加上就好了),就不允许这么写了。

函数传入参数n:30
对象a的属性kk的值:20
解释:如上所述,Test构造函数不再执行,n=30也没有传到对象里面去。