新微赢技术网

标题: 请教个关于构造函数的问题! [打印本页]

作者: 阳光aiq浪子    时间: 2009-11-3 03:52
标题: 请教个关于构造函数的问题!
#include<iostream.h>
class A{
public:
   int x,y;
private:
   A(){x=1;y=2;}
};
void main()
{
    A a;
    a.x=2;
}
请问这个程序的构造函数定义为私有成员为什么就错误?请高手们帮忙!
作者: ゛,    时间: 2009-11-3 03:52
这个。。。
实际上,你在写
A a; 
这句话的时候,调用了class A 里面的  A(){x=1;y=2;}这个函数,而它又是私有的,就出错啦
作者: 欧阳风    时间: 2009-11-3 03:52
把构造函数放在private区段...限制对象创建........
作者: seeYa    时间: 2009-11-3 03:52
那就是说不管私有成员里面是什么样的成员,用对象去调用都是错的了!是这样么?
作者: 笨笨洋葱    时间: 2009-11-3 03:52
原帖由 [bold][underline]小说贝斯[/underline][/bold] 于 2008-1-4 23:37 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1171507&ptid=195933][/url]
那就是说不管私有成员里面是什么样的成员,用对象去调用都是错的了!是这样么?

是这样的。
作者: 大师傅    时间: 2009-11-3 03:52
A  a

这一句 在类外使用了私有成员就会出错!
作者: ♀鈊亂ゞ鎵伙    时间: 2009-11-3 03:52
基本上可以这样说
但是也有人说可以将private里面的东西弄出来
包括#define private public什么的

对于私有成员只能为该类的成员函数调用(构造函数为的是让别人使用该类,所以没有看见过将其私有的)
对于一些中间函数可以私有化,这就是C++的安全性
作者: 林枫    时间: 2009-11-3 03:52
LS似乎看过《expectional C++ style》~
作者: 太阳神    时间: 2009-11-3 03:53
构造函数是在创建类对象时调用的,你把它定义为私有的。在创建类对象时调用一个类的私有函数但然是错误的了。
作者: 妊嫒ぞ流逝    时间: 2009-11-3 03:53
你可以用静态函数去初始化.
#include<iostream.h>
class A{
public:
   int x,y;
private:
static    A* _instance;
private:
   A(){x=1;y=2;}
public:
static A *instance();
};
A *A::_instance=0;
A *A::instance()
{
    if(_instance==0) { _instance=new A();}
    return _instance;
}
void main()
{  A *p;
p=A::instance();
cout<<p->x;
}
希望我们都可以从例子当中得到提高.这个是2004年的软件考试的下午题目,有点像.




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2