| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 670 人关注过本帖
标题:大家分析一下这个c++程序问题所在!?
只看楼主 加入收藏
sunny孙
Rank: 2
等 级:论坛游民
帖 子:18
专家分:37
注 册:2011-11-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:9 
大家分析一下这个c++程序问题所在!?
#include<iostream>
using namespace std;

class Test
{
public:
    int *p;
    Test(int value)
    {
        p =new int(value);
    }
    ~Test()
    {
        delete p;
        p=NULL;
    }
    void PrintValue()
    {
        cout<<"The value is "<<*p<<endl;
    }
};

void Func(Test t)
{
    cout<<"the func"<<endl;
}

int main()
{
    Test t1=33;
    Func(t1);
    t1.PrintValue();
    return 0;
}
编译能通过,结果有问题!
搜索更多相关主题的帖子: public 
2013-09-24 15:22
sunny孙
Rank: 2
等 级:论坛游民
帖 子:18
专家分:37
注 册:2011-11-4
收藏
得分:0 
  看了好久,还是自己对指针问题理解不透,问题可能在于int *p定义以后,没有赋初值,也就是没有指向任何地址,在构造函数中直接使用是不行的,也许还有别的问题,希望大家指出来。
2013-09-24 16:45
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:5 
程序代码:
#include<iostream>
using namespace std;

class Test
{
public:
    int *p;
    Test(int value)
    {
        p = new int(value);
        cout<<"构造"<<endl;

    }
    ~Test()
    {
        delete p;
        p=NULL;
        cout<<"构造"<<endl;

    }
    void PrintValue()
    {
        cout<<"The value is "<<*p<<endl;
    }
};

void Func(Test t)
{
    cout<<"the func"<<endl;
}

int main()
{
    Test t1(33);
    Func(t1);
    t1.PrintValue();
    return 0;
}


看下这个程序是不是有启发 当然C++我也是业余水平
2013-09-24 17:22
IT男year
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:106
注 册:2013-6-9
收藏
得分:5 
回复 2楼 sunny孙
这里有对象复制即Func(t1);可能跟没有自定义拷贝构造函数有关系,你自己去看看书吧!我昨天刚好看到拷贝构造函数...只可惜没有看完.明天给你答复哈!
2013-09-24 17:53
sunny孙
Rank: 2
等 级:论坛游民
帖 子:18
专家分:37
注 册:2011-11-4
收藏
得分:0 
回复 3楼 zklhp
  这个跟原来的程序没有本质区别吧,输出结果还是错误的,并不是33,您仔细看一下结果。
2013-09-24 19:09
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用sunny孙在2013-9-24 19:09:56的发言:

  这个跟原来的程序没有本质区别吧,输出结果还是错误的,并不是33,您仔细看一下结果。

程序代码:
#include<iostream>
using namespace std;

class Test
{
public:
    int *p;
    Test(int value)
    {
        p = new int(value);
        cout<<"构造"<<endl;

    }
    ~Test()
    {
        delete p;
        p=NULL;
        cout<<"构造"<<endl;

    }
    void PrintValue()
    {
        cout<<"The value is "<<*p<<endl;
    }
};

void Func(Test t)
{
    cout<<"the func"<<endl;
}

int main()
{
    Test t1(33);
    t1.PrintValue();
    Func(t1);
    return 0;
}


你只是想要结果么 那稍微一改就对了 我想说的是你看看这里构造函数执行了几次。。
2013-09-24 19:38
sunny孙
Rank: 2
等 级:论坛游民
帖 子:18
专家分:37
注 册:2011-11-4
收藏
得分:0 
回复 6楼 zklhp
  谢谢指点!
2013-09-24 21:43
mcm_mingge
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-4-25
收藏
得分:0 
#include<iostream>
using namespace std;

class Test
{
public:
    int *p;
    Test(int value)
    {
        p =new int(value);
    }
    Test(const Test&right)
    {
        p=new int(*right.p);
    }
    ~Test()
    {
        delete p;
        p=NULL;
    }
    void PrintValue()
    {
        cout<<"The value is "<<*p<<endl;
    }
};

void Func(Test t)
{
    cout<<"the func"<<endl;
}

int main()
{
    Test t1=33;
    Func(t1);
    t1.PrintValue();
    return 0;
}
加一个拷贝构造函数。你在调用Func时,t1.p指向的内容被delete掉了。好好看看拷贝构造函数的功能。
2013-09-25 10:47
IT男year
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:106
注 册:2013-6-9
收藏
得分:0 
八楼正解
2013-09-25 10:57
IT男year
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:106
注 册:2013-6-9
收藏
得分:0 
#include<iostream>
using namespace std;
class Test
{
public:
     int *p;
     Test(int value)
     {
         p = new int(value);
         cout<<"构造"<<endl;
     }
     Test(const Test & x)
     {
         p=new int(*x.p);
     }
     ~Test()
     {
         delete p;
         p=NULL;
         cout<<"析造"<<endl;
    }
    void PrintValue()
    {
         cout<<"The value is "<<*p<<endl;
    }
};
 
void Func(Test t)
{
     cout<<*t.p<<'\n'<<"the func"<<endl;
}
 
int main()
{
     Test t1(33);
     Func(t1);
     t1.PrintValue();
     return 0;
}
看看我写的这个噢!我说是拷贝构造函数的问题吧!
2013-09-25 11:10
快速回复:大家分析一下这个c++程序问题所在!?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017531 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved