#include<iostream>
using namespace std;
class A
{
public:
A(){x=new int;*x=5;}//创建一个对象的同时将成员指针变量保存在新空间中
~A(){delete x;x=NULL;}//析构对象的同时删除成员指针指向的内存空间,为了稳妥起见将 指针赋为空
A(const A &a)
{
cout<<"复制构造函数执行...\n"<<endl;
x=new int;//复制构造对象的同时将成员指针变量保存在新空间中
*x=*(a.x);//读取旧对象的成员指针变量x地址处的数据并赋给新对象的成员指针变量x所指向的内存区域
}
void print()const{cout<<*x<<endl;}
void set(int i){*x=i;}
private:
int *x;
};
int main()
{
A *a=new A();
cout<<"a:"<<a->print()<<endl;
A b=(*a);
a->set(32);
cout<<"b:"<<b.print()<<endl;
b.set(99);
cout<<"a:"<<a->print()<<endl;
delete a;
return 0;
}
vs里也不行
程序中出问题的是
cout<<"a:"<<a->print()<<endl;这种写法,有三处。问题在于,print函数没有返回值,cout的<<运算符不能作用于右边是void类型的对象上,所以编译不通过。
可以修改输出形式,如下:
cout << "a:";这样就不会出现问题了。
coutprint()print();cout <<endl;能解释一下为什么要这么写吗?之前那么写为什么不行?
本回答被提问者采纳