c++ 类对象定义 ,和 函数声明的区别。。?

比如:
class A
{
public:
int d;
A(){}
A(int i){}
};

//如果现在定义一个对象:
A a1(3);
//好像是没问题,定义了一个a1。但是上面那句能不能看成是一个返回值类型为A函数调用?

A *a1(); //但是这句就好像就不是定义对象了,像是在函数声明。。?我想定义一个类类型的指针
A *a2(2);//这句就报错了,这是啥情原因?

第1个回答  推荐于2016-09-17
A a1(3) ; //定义了一个A类对象,并用3初始化,这个不会被当作函数声明,括号里的3不符合参数类型声明

A *a1(); //这是一个函数声明,返回一个A类指针
A *a2(2); //这个错误,A* a2(2);的含义是定义一个A类指a2,并用2初始化该指针,但A类不存在int与A*之间的转换函数,所以错误

可以这样:
A* a2; 或者
A* a2(&a1); //用a1的地址初始化a2追问

请问,对A类, int与A*之间的转换函数,如果要有,该怎么写呢?

追答

这个是不行的,A类的转换函数只能将某个其他类型转换为A类型,但不能转换为A类型的指针.
int 要转换为A*只能强制转换,例如:
A* a2=(A*)2;

本回答被提问者采纳
第2个回答  2014-11-24
A a1(3); 不会看成是一个返回值类型为A函数调用? 调用带参构造函数生成一个类对象实例。
函数调用时,不会带有A返回值类型。
不是函数声明,因参数位置是常数。

A *a1; //定义一个类类型的指针

A *a2; //定义类指针,不能带有()!!
第3个回答  2014-11-24
类类型指针的定义:
A *p;
对于指针的赋值:
A a1(3);
p = &a1; //指向已有的对象
p = new A; //动态分配一个对象空间,这个对象调用A()来初始化