初学者c++类对象引用,基础问题。求高手 class A……… A a1; A* a2=new

初学者c++类对象引用,基础问题。求高手 class A……… A a1; A* a2=new A(); a2是指向某个A对象的引用。 那么a1是什么,他为什么不能用cout 输出

a1 是 A类的对象, a2 是 指向A类对象的指针.
A* a2=new A() 是调用 A类的构造函数来创建一个A类对象,并把对象地址赋给a2;
A a1; 是直接创建一个A类对象.追问

a1就是个符号啊,他怎么会是对象。。。

追答

对啊, 就是个符号, 就想 某人的名字, 名字只是个文字而已,

追问

对啊,那么他就是个对象的代号啊。他也是个引用啊

追答

理解这些不能总是联想人类语言, 这是编程语言, 是告诉编译器, A a1 是告诉编译器 我现在定义一个A类型的 对象变量, 名叫 a1. A * a2 是告诉编译器 我现在定义一个指针,这个指针指向 A类型的对象.
A &a3 是告诉编译器 我现在定一个引用, 引用名字是 a3 指向的是 A类型的对象.
cout 不能输出是因为, cout 也是一个对象, << 是符号, cout 对象 没有定义cout<<(A类型) 的算法.
所以编译器不知道怎么做, 就报错了, 如果, 你定义一个 cout<<A 这种 运算符重载 那就不会报错.
但我看来你是初学者, 还是先放着,到了学重载运算符那阶段你就会明白当时为什么会报错了.

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-06-08
a1叫做一个类的对象,也就是为a1分配了内存空间,a1对象的各个成员的值就是默认的,或是构造函数初始化的值。

至于为什么不能cout,是因为<<这个操作符不支持输出类,所以想输出类就要自己重载,可以输出string这个类的对象,是因为<<库已经编写好了支持输出string类的对象。
不知道有没有说清楚
第2个回答  2017-01-14
分情况
如果是定义的时候 使用=操作
比如class A
A a=b;
调用的是拷贝构造
除此外,
a=b都是调用赋值重载。
相似回答