LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1177|回复: 8

初学c++时的类问题??谁可解答???

[复制链接]
游客  发表于 2003-6-26 12:04:35 |阅读模式
有一个小程序
#include <iostream>
using namespace std;
        class Name {
        private:
                int n;
                char names[256];
        public:
                Name();
                ~Name();
                void input();
        };

        Name::Name()
        {
                cout << "lease Input your name:\n" <<endl;
        }

        Name::~Name()
        {
                cout << "You name is " << names <<endl;
        }

        void Name::input()
        {
                cin >> names;

        }

int main()
{
Name myname;
        myname.input();
        return 0;
}


执行输出:
        d:\test
        Please Input your name:
        hello
        You name is hello
        d:\

如果main()改为
        int main()
        {
        Name *myname;
                myname->input();
        return 0;
        }
为什么不会出现上面的输入结果?构造函数和析构函数为什么不会执行?
如果我要用Name *myname,怎么达到Name myname的效果?
发表于 2003-6-26 13:18:24 | 显示全部楼层
估计没有把指针和变量搞清楚,
指针要指向变量地址
Name* myname=new Name;//new建立一个name对象,让myname指向这个name对象;
myname->input();
return 0;

ps:源码没有宿进,方法请参阅VB代码帮助
发表于 2003-6-26 13:25:00 | 显示全部楼层
当然:

你乱用什么,->是用于指针操作的

不过我也不懂
游客  发表于 2003-6-26 18:21:31

谢谢回答!!

我还有个问题,我的Name *myname没有myname = new Name也能myname->input()哦?空的指针也可以???
游客  发表于 2003-6-26 18:24:07

接上面

不过运行后,输入字符后会出错,我用的是dev-c++ 在win98下,空指针指向
input既然不报错阿,^_^。
发表于 2003-6-26 18:47:34 | 显示全部楼层
空指针引用函数编译不会报错的,只是其值是不定的!
但程序运行时就会出错!
发表于 2003-6-26 20:49:43 | 显示全部楼层
int main()
{
Name *myname; // 没有分配空间
// 加一行 myname = new Name;
myname->input();
// 加一行 delete myname;
return 0;
}
发表于 2003-6-27 21:57:02 | 显示全部楼层
C语言中的指针实在是个好东东,但也真是危险.
有没有什么编译开关能对指针进行稍严格一点的限制?
发表于 2003-6-28 04:14:53 | 显示全部楼层

  1. #include <iostream>

  2. using namespace std;

  3. class A{
  4. public:
  5.   void print(void){cout << "haha " << i << endl;}
  6.   int i;
  7. };

  8. int
  9. main(void)
  10. {
  11.   A *x;
  12.   x->print();

  13.   return(0);
  14. }
复制代码

这个程序编译不会报错,执行也照样正确。
对象在内存里主要包含了数据成员,成员函数并不包含在对象占用的内存里,声明10个对象,成员函数还是只有一个,就算没有为x分配地址,print函数是存在的,而且也没什么问题,但是i就不行了,因为x可能指向任何地方,所以i也是,读i一般不会出现问题(也应该算是错误),写一般就会出现内存存取错误。
总之,虽然上面这个程序能用,但是不分配内存是个错误,要是不注意的话迟早被指针扎一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表