看这个类的定义错在什么地方,很简单的类(20分)

zhfj001 2008-11-11 09:47:32
class base
{
int *p;
public:
base(int a){p=&a;}
int Getx(){return *p;}
~base(){delete p;}
}

问题:
(1)请问错在哪里,应该怎末修改?
(2)请给个测试函数测试一下,谢谢。

问题解决即给分。
...全文
89 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhfj001 2008-11-18
  • 打赏
  • 举报
回复
多谢楼上的兄台,多谢。
dfkjsdhfks 2008-11-11
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class base
{
int *p;
int b; //强烈建议加上这么一句(后面有相应的修改),否则将得到一个不确定的值,a的生命周期一到,会被释放.

public:
base(int a){ p=&a;}
int Getx(){return (*p);}
~base()
{
// delete p; //它在析构函数中,不要人为的去删除它,否则会使同一内存空间被多次删除.
}
};
int main()
{
base bt(3);
int pt = bt.Getx ();
cout << pt <<endl;
return 0;
}
zhfj001 2008-11-11
  • 打赏
  • 举报
回复
多谢大家的帮助。
xxgamexx 2008-11-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuyu637 的回复:]
2个错误,


第一个语法使用错误,,
类的申明后有一个封号

class test{};


第二个错误是语义上的错误。
指针的初始化应该使用一个new出来的地址,否则指向的是一个临时变量的内存地址。运行会出错。

class base
{
int *p;
public:
base(int* a){p=a;}
int Getx(){return *p;}
~base(){delete p;}
}
[/Quote]

sorry~ 顶这个!

不然局部变量 int a的地址会被提早释放 *p也就成了野指针
xxgamexx 2008-11-11
  • 打赏
  • 举报
回复
LZ这样的做法是很不好的


他使用了局部变量的地址


你delete的时候会出错的~

即使要写,楼上的可以~ UP!
liumingrong 2008-11-11
  • 打赏
  • 举报
回复

int a = 3;
base b(a);
cout << b.Getx();

[Quote=引用 7 楼 liumingrong 的回复:]
C/C++ code
class base
{
int *p;
public:
base(int& a){p=&a;}
int Getx(){return *p;}
~base(){
} ;
[/Quote]
liumingrong 2008-11-11
  • 打赏
  • 举报
回复

class base
{
int *p;
public:
base(int& a){p=&a;}
int Getx(){return *p;}
~base(){
} ;

wuyu637 2008-11-11
  • 打赏
  • 举报
回复
2个错误,


第一个语法使用错误,,
类的申明后有一个封号

class test{};


第二个错误是语义上的错误。
指针的初始化应该使用一个new出来的地址,否则指向的是一个临时变量的内存地址。运行会出错。

class base
{
int *p;
public:
base(int* a){p=a;}
int Getx(){return *p;}
~base(){delete p;}
}

R9R9R9 2008-11-11
  • 打赏
  • 举报
回复
class base
{
int *p;
public:
base(int a){p= new int(a);}
int Getx(){return *p;}
~base(){delete p;}
};


int main()
{

base b(20);
cout<<b.Getx()<<endl;

return 0;
}
CEO27 2008-11-11
  • 打赏
  • 举报
回复
没分号
薛定谔之死猫 2008-11-11
  • 打赏
  • 举报
回复
没有分号
R9R9R9 2008-11-11
  • 打赏
  • 举报
回复
~base(){delete p;}
delete 只能用来删除new出来的指针。

base ob(10); 就错了。随便怎么用都是错的。
anuosix 2008-11-11
  • 打赏
  • 举报
回复
最后少一个分号

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧