首页 新闻 会员 周边 捐助

大家帮我看看,指针问题

0
悬赏园豆:5 [待解决问题]
#include"iostream"
using namespace std;
#define PI 3.1416
class SimpleCircle{
private:
    int *itsRadius;
    //int *itsRadius=NULL;为什么这样不行啊? 
public:
    SimpleCircle();
    SimpleCircle(int);
    SimpleCircle(const SimpleCircle &);
    ~SimpleCircle(){}
    void setRadius(int);
    int getRadius()const;

};
SimpleCircle::SimpleCircle(){
    itsRadius=new int(5);
    //*itsRadius=5;为什么这样不行 
}
SimpleCircle::SimpleCircle(int radius){
    itsRadius=new int(radius);
     //*itsRadius=radius;为什么这样不行 
}

SimpleCircle::SimpleCircle(const SimpleCircle &rhs){
    int val=rhs.getRadius();
    itsRadius=new int(val);
    //itsRadius=rhs.getRadius()const;为什么这样不行 
}

int SimpleCircle::getRadius()const{
    return *itsRadius;
}
int main()
{
    SimpleCircle CircleOne,CircleTwo(9);
    cout<<"CirclrOne:"<<CircleOne.getRadius()<<endl;
    cout<<"CircleTwo:"<<CircleTwo.getRadius()<<endl;
    return 0;
}
爱嘉牛LA的主页 爱嘉牛LA | 初学一级 | 园豆:190
提问于:2012-05-10 13:41
< >
分享
所有回答(4)
1

1.不能在类里直接给数据成员赋值

2.

*itsRadius=5; 这个指针并没有初始化,没有指向任何内存区域,对它解引用会出现未知错误。
小童鞋 | 园豆:202 (菜鸟二级) | 2012-05-10 16:22

为什么private int *itsRadius;可以不初始化呢?这样不会危险吗?

支持(0) 反对(0) 爱嘉牛LA | 园豆:190 (初学一级) | 2012-05-12 08:34
1

类的声明,好比用户自己定义了一种新的类型,而这种类型就好比int,double等类型,它在没有实际的对象之前,在内存中并没有相对应的实际的对象的存在,也就是说类中的int等对象并不相当于类外的int等对象,在内存中并没有被分配相应的空间,因此不能直接给它赋值,因为不知道到底要将这个值给谁的嘛~~为什么要new一下,而不能直接赋值也是同样的道理啦。当然当类定义一个对象的后,如,SimpleCircle clc;,此时若成员变量改为public,则能够通过int a=8; clc.itsRadius=&a 进行直接赋值了(当然得将默认构造函数中的itsRadius=new int(5);这句话给删除啦~)。

个人理解,可能有误~~

grassofsky | 园豆:342 (菜鸟二级) | 2012-05-10 20:01
0
 //int *itsRadius=NULL;为什么这样不行啊? 

这样不行是因为类的定义不允许初始化数据成员,除了静态数据成员外。

而下面三个不行则是因为itsRadius是一个指针,由于没有初始化,将会指向一个未知的空间,对这个未知内存空间赋值是很危险的,如果是一块只读空间,将会运行时出错。

hazir | 园豆:216 (菜鸟二级) | 2012-05-20 17:32
0
1.//int *itsRadius=NULL;为什么这样不行啊?

因为类中的数据成员不能直接赋初值,必须通过类的构造函数或初始化函数赋初值。

 

//*itsRadius=5;为什么这样不行 

2.指针没有动态分配内存时,不允许赋值,否则运行会出错。

 

HK东风破 | 园豆:164 (初学一级) | 2012-06-08 11:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册