c++入门 构造函数 求解答!!!!追加财富值!

这里有一段代码:里面有些笔记问题也在里面了#include<iostream>usingnamespacestd;classA{public:A(){cout<<"con... 这里有一段代码: 里面有些笔记 问题也在里面了
#include <iostream>
using namespace std;
class A{
public:
A(){
cout<<"construct A() is called!!"<<endl;
}
A(coust A &a)
{
x=a.x;
y=a.y;//此两行保证拷贝构造不被覆盖,xy哪里来的???
cout<<"construct A(a&) IS called!"<<endl;
}//屏蔽掉这一段结果是对的,系统也有默认的拷贝构造函数
void setxy(int x;int y){
this->x=x;
this->y=y;//这是什么意思
}
void show(){
cout<<"x="<<x<<",y="<<y<<endl;}
private:
int x;
int y;
};
//void printxy(A &a)
void printxy(A a){//此操作导致拷贝构造只被调用1次 加速
a.show();
}
A getA(int x,int y){
A a;
a.setxy(x,y);
return a;}//什么情况下要返回值
int main()
{ A a1,a2;//调用构造函数到底是怎么调用的 先写A 再写a 这是格式么?
a1.setxy(3,5);//第一次调用构造函数 系统默认 会覆盖原来的基类
printxy(a1);//也调用了??
A a3(a1);//显式调用拷贝构造 通过a1构造a3
printxy(a3);//也调用了 加上系统那次共4次
A* a4=getA(5,6);
printxy(*a4);
cout << "Hello world!" << endl;
return 0;
}
展开
 我来答
pp1611400
2014-03-17
知道答主
回答量:20
采纳率:0%
帮助的人:13.2万
展开全部

你的问题我都回答再程序的解释中,每一步怎么执行都写了

//构造函数

#include <iostream>

using namespace std;

class A{

public:

A()

{

cout<<"construct A() is called!!"<<endl;

}

A(const A &a)

{

x=a.x;

y=a.y;//此两行保证拷贝构造不被覆盖,x,y是private中定义的类成员

cout<<"construct A(a&) IS called!"<<endl;

}//屏蔽掉这一段结果是对的,系统也有默认的拷贝构造函数

void setxy(int m,int n)

{

this->x=m;

this->y=n;//this是指向类定义的对象的一个隐含指针,这就相当于给类中的参数赋值!我改成了m,n好认了吧

}

void show()

{

cout<<"x="<<x<<",y="<<y<<endl;

}

private://这里定义的是有类类型对象的几个参数

int x;

int y;

};

void printxy(A a)//而调用这个函数就要传递一个实参给形参吧,相当于a=a1这样就执行单形参构造函数A(const A &a)

{

a.show();

}

A getA(int x,int y)

{

A a;//调用这个函数时这边要执行默认构造函数A()

a.setxy(x,y);

return a;//执行这一句是相当于把a返回给一个A类型的对象,执行单形参构造函数A(const A &a)

}

int main()

{   

A a1,a2;//这一句执行两次默认构造函数A()

a1.setxy(3,5);//这一句给a1的两个元素赋值a1.x=3,a2.x=5

printxy(a1);//这一句先执行A(const A &a)最后输出x=3,y=5

A a3(a1);//这一句直接执行A(const A &a),相当于a3=a1

printxy(a3);//这一句先执行A(const A &a)最后输出x=3,y=5

A a4;//这一句执行A()

a4=getA(5,6);//先执行A(),再执行A(const A &a)

printxy(a4);//这一句先执行A(const A &a)最后输出x=3,y=5

cout << "Hello world!" << endl;

return 0;

}

下面的再给一个图是你说的将A(const A &a)去掉

不懂再问

更多追问追答
追问
谢谢亲 好感人啊...
再问一句...那个this指针 在你改成mn之后是不是可以不用了呢? 还是赋值的时候都要加->这个?

还有这段也不是很懂
A getA(int x,int y)//这个函数是干嘛的啊 不是取a的值么 为什么不叫geta
{
A a;////这里在干嘛啊?构造谁啊....
a.setxy(x,y);
return a;////讲的再通俗一点就好了 我是初学==
}
追答

  this可以不要的,不要一样可以

A a;就是定义一个A类型啊,因为要调用A类里的类成员函数a.setxy(x,y),这些就是加深你对类的理解。你return a不就是相当于执行力a4=a吗,这就要执行单行参的构造函数来啊

构造函数就是对他声明的对象进行值初始化,

加这个getA其实就是让你对类有更深的了解,它返回也就是一个A类型,其实类它就是一种类型,正如我们经常用的int,string这些类型,多用就行了



  • 可以采纳吗????

蓝色和清风
2014-03-17 · 超过53用户采纳过TA的回答
知道小有建树答主
回答量:115
采纳率:0%
帮助的人:109万
展开全部
第一个问题:a是一个A类的对象,具有A类的所有成员函数和私有成员,x,y就是A类的私有变量。所以可以用a.x a.y 来获取相应的x,y值。
第二个问题:this->x 代表这个类的变量x,this->x=x; 就是把这个类的私有x变量赋值,y同理。
第三个问题:A getA(x,y) 这个函数就是设置一个A类对象,x,y值是通过参数传进去的,并返回设置的这个对象。所以是任何时候都返回此值,这个要需要的A类变量。
第四个问题:A a1,a2; 这句相当于声明变量,类似于 int b,c; 此时的b,c是int型变量,而a1,a2 是A类型的变量。
第五个问题:应该是也调用了,应为会创建一个A类型的对象a,此时会调用A类的构造函数。
更多追问追答
追问
亲好快啊!谢谢~
再问一句 a是怎么变成A的对象了呢
A getA(int x,int y){
A a;
a.setxy(x,y);
return a;}
这段是啥意思啊...
追答

就是因为声明时候 是“ A a;” 是这么声明的,所以就是A类的对象。  原理和 “ int b;” 是一样的,把 “A”  看成 “int” 就可以了。


那是一个函数, 函数的返回值是A类型的对象, 函数名:getA,  函数参数是 x,y  ,  在函数里面声明了一个A类的对象名字是a, 通过调用A类的函数setxy()来对对象a的x,y值进行重新复制,最后返回对象a。

比如当你想要一个x=5,y=6的A类对象名字是d 时,就可以这么写:

A d=getA(5,6);   就可以了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式