一道笔试题

来源:百度知道 编辑:UC知道 时间:2024/06/02 08:08:16
class A
{

public:
A(){func(0);};

void func(int data){printf("A1 :%d\n",data);}

void func(int data) const{printf("A2 :%d\n",data);}
};

int main()

{
A().func(1);

return 0;

}

输出结果是
A1 :0

A1 :1
为什么?详细过程。。。最主要是A()什么意思?表示什么
所谓实例化,是不是在调用A()构造函数之前,编译器生成了一个临时的A的对象啊?

A().func(1)的执行分2步
1,实例化A,这个过程要调用A的构造函数,就是A(){func(0)};
2,调用A的func函数。
所以应该输出
A1:0
A1:1

两个func函数式const重载的。由于A的实例不是const的,构造函数也是默认调用非const函数的。所以两个输出都是A1:X的形式。

A()是class的构造函数,创建对象时就会自动调用它了

我的想法是A(){func(0);}是显式构造函数
里面调用了一次func(0)函数;
那么先调用func(0)
然后再调用func(1)