| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 468 人关注过本帖
标题:找错,谢谢
只看楼主 加入收藏
longyou2011
Rank: 2
等 级:论坛游民
帖 子:46
专家分:19
注 册:2011-1-12
结帖率:88.24%
收藏
已结贴  问题点数:20 回复次数:5 
找错,谢谢
#include<iostream>
#include<string>
using namespace std ;
class Person
{
public :
    Person ( const Person &p ) ;
    ~Person () ;
    void setAge ( int x ) { age = x ; }
    void print () ;
private :
    char * name ;
    int age ;
} ;

Person :: Person ( const Person &p  )
{
    name = new char [ strlen ( p.name ) + 1 ] ;
    strcpy ( name , p.name ) ;
    age = p.age ;
    cout << " Copy constructor called ! " << endl ;
}
Person :: ~Person ()
{
    cout << " Destructor called ! " << endl ;
    delete name ;
}
void Person :: print () { cout << " name : " << name << " age : "<< age << endl ; }
int main ()
{
    Person p1 ( " 张三 " , 21 ) ;
    Person p2 = p1 ;
    p1.setAge (1) ;
    p2.setAge (2) ;
    p1.print () ;
    p2.print () ;
    return 0 ;
}
错在了哪里
2011-01-31 16:48
zqmillet
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:108
注 册:2008-7-20
收藏
得分:20 
又是lz……

声明里没有相应的两个形参的构造函数
这是完整的代码:
程序代码:
#include<iostream>
#include<string>
using namespace std ;
class Person 
{
public :
    Person (const char * n, const int a);  //...............................1
    Person ( const Person &p ) ;
    ~Person () ;
    void setAge ( int x ) { age = x ; }
    void print () ;
private :
    char * name ;
    int age ;
} ;

Person::Person (const char * n, const int a)            //...................2
{
    name = new char [strlen(n) + 1];
    strcpy(name,n);
    age = a;
    return;
}

Person :: Person ( const Person &p  )
{
    name = new char [ strlen ( p.name ) + 1 ] ;
    strcpy ( name , p.name ) ;
    age = p.age ;
    cout << " Copy constructor called ! " << endl ;
}
Person :: ~Person ()
{
    cout << " Destructor called ! " << endl ;
    delete name ;
}
void Person :: print () { cout << " name : " << name << " age : "<< age << endl ; }
int main ()
{
    Person p1 ( " 张三 " , 21 ) ;
    Person p2 = p1 ;
    p1.setAge (1) ;
    p2.setAge (2) ;
    p1.print () ;
    p2.print () ;
    return 0 ;
}


VC提示的很到位啊,怎么会找不到错误呢?
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-01-31 20:14
zqmillet
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:108
注 册:2008-7-20
收藏
得分:0 
另:
#include<string>

这句话多余
2011-01-31 20:16
longyou2011
Rank: 2
等 级:论坛游民
帖 子:46
专家分:19
注 册:2011-1-12
收藏
得分:0 
又是。。。。。谢谢你的多次回答 ,但是用你改正后的代码执行时难道没有出现错误提示框吗? 程序只调用了一次构造函数,但调用了两次析构函数
2011-01-31 21:45
zqmillet
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:108
注 册:2008-7-20
收藏
得分:0 
以下是引用longyou2011在2011-1-31 21:45:42的发言:

 又是。。。。。谢谢你的多次回答 ,但是用你改正后的代码执行时难道没有出现错误提示框吗? 程序只调用了一次构造函数,但调用了两次析构函数

p1和p2构造了两次啊,那个p1调用的是两个形参的那个构造函数
p2调用的是拷贝构造函数
析构函数也是调用了2次,很正常啊

我用的事故VC6编译的,没有什么问题
截图在2楼
2011-01-31 23:53
longyou2011
Rank: 2
等 级:论坛游民
帖 子:46
专家分:19
注 册:2011-1-12
收藏
得分:0 
不好意思,我搞错了。厉害厉害
2011-02-01 09:32
快速回复:找错,谢谢
数据加载中...
 
   



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

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