读书人

趋势笔试题:如何它调用构造函数啊

发布时间: 2012-02-15 12:09:44 作者: rapoo

趋势笔试题:怎么它调用构造函数啊?
#include <stdio.h>



class A{

public:

A(){func(0);};

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

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

void func(char *str){printf("A3 :(%s)\n",str);}

};



class B:public A{

public:

void func(){printf("B1 :%s\n","");}

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

void func(char *str){printf("B3 :(%s)\n",str);}

};



int main()

{

A *pA;

B b;

const A *pcA;



pA=&b;

pA->func(1);

pA->func("test");

A().func(1);

pcA=&b;

pcA->func(2);

return 0;

}

A().func(1);
这不是调用构造函数呀?不是不可以显示调用吗?但编译能通过呀,怎么回事?
高手帮帮我!!


[解决办法]
A()是构造一个临时A对象,不是普通得调用构造函数
[解决办法]
“A()”是构造一个无名的临时对象。临时对象可以生存到表达式结束,因此在它上面调用func没有任何问题。
[解决办法]
A() yield a rvalue, which is not necessary to be a c-qualified object in C++. What a confusing!
When I started to learn C++, I always have in mind that a temporary object is const-qualified objct, which meant that A() should yield a const object that could not call non-const member function, but...it turns out I was so wrong.


The deepper I dig into C++, the less I feel I know it.
[解决办法]
其实这里的A()就相当于一个 具体的对象 只是一个无名的对象而已

读书人网 >C++

热点推荐