打印
[嵌入式linux]

VC++的一段程序

[复制链接]
1480|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
醉心369|  楼主 | 2013-8-5 21:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iostream.h>
class Point
{
public:
        int x;
        int y;

        Point()
        {
                x=0;
                y=0;
        }
        Point(int a,int b)
        {
                x=a;
                y=b;
        }
        ~Point()
        {
        }
        void output()
        {
                cout<<x<<endl<<y<<endl;
        }
        void output(int x,int y)
        {
                x=x;
                y=y;
        }
};

void main()
{
        Point pt(3,3);
        pt.output(5,5);
        pt.output();
}
上面是一段VC++的程序,正确的输出是什么,为什么?

相关帖子

沙发
jamsan| | 2013-8-7 17:24 | 只看该作者
输出3,3。 pt(3,3),使x=3,y=3;
pt.out(5,5)中,x,y指向的是函数本地变量,而不是成员变量,所以3,3不变。
pt.out()输出3,3。

使用特权

评论回复
板凳
john_lee| | 2013-8-7 18:18 | 只看该作者
楼主是来调戏大家的,楼上还认真了,:lol

使用特权

评论回复
评论
醉心369 2013-8-9 15:02 回复TA
想多了把 
地板
醉心369|  楼主 | 2013-8-9 15:00 | 只看该作者
jamsan 发表于 2013-8-7 17:24
输出3,3。 pt(3,3),使x=3,y=3;
pt.out(5,5)中,x,y指向的是函数本地变量,而不是成员变量,所以3,3不变。 ...

不十分明白,如果
void output(int a,int b)
        {
                x=a;
                y=b;
        }
这个是否就变了?

使用特权

评论回复
5
418417996| | 2013-8-10 09:52 | 只看该作者
醉心369 发表于 2013-8-9 15:00
不十分明白,如果
void output(int a,int b)
        {

一定变啊,他那个变量整一样了

使用特权

评论回复
6
ballack_linux| | 2013-8-14 09:50 | 只看该作者
楼上解释是对的,不知道楼主是否理解了,我再解释一遍:
一个类里面,如Point类,定义了类成员变量(如int x,int y),如果在这个类中的某个成员函数中(如void output(int x,int y))也定义了与类成员变量同名的变量(如output函数中的x和y),
那么此时类成员变量x和y在output函数中是不可见的,也就是说,output函数中的变量x和y无论如何改变,也不会对类成员变量x和y有影响,因为所谓的局部变量,就是在调用的时候才会被分配空间,函数output结束的时候空间也会被回收。
而类成员变量x和y是在构造类变量的时候分配的空间,在析构的时候才会被释放空间。
那么如下:
Point pt(3,3)调用的是Point类的构造函数Point(),对类成员变量进行初始化,此时x=3,y=3
pt.output(5,5)调用的是Point类的output函数,由于output函数参数名跟类成员变量相同,所有类成员变量在此函数中不可见,即为不可用,那么x=x,y=y的操作相当于自己给自己赋值,而无论怎么赋值,当output函数结束的时候它们的空间已经被回收了,此时类成员变量的值是多少还该是多少,没改变。
不知楼主是否明白了。。感觉说的好啰嗦,见谅

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
z755924843 + 1 赞一个!
7
guobaplayer| | 2013-8-18 13:11 | 只看该作者
本来想仔细 多看下呢, 呵呵,原来楼上的都回答了,呵呵,这个是有点简单.让我想起来我刚开始学的时候也问过这样的问题.哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

283

帖子

2

粉丝