注册 登录
编程论坛 C++教室

请教个关于构造函数的问题!

小说贝斯 发布于 2008-01-04 21:40, 2099 次点击
#include<iostream.h>
class A{
public:
   int x,y;
private:
   A(){x=1;y=2;}
};
void main()
{
    A a;
    a.x=2;
}
请问这个程序的构造函数定义为私有成员为什么就错误?请高手们帮忙!
14 回复
#2
linsua2008-01-04 22:10
这个。。。
实际上,你在写
A a; 
这句话的时候,调用了class A 里面的  A(){x=1;y=2;}这个函数,而它又是私有的,就出错啦
#3
中学者2008-01-04 23:18
把构造函数放在private区段...限制对象创建........
#4
小说贝斯2008-01-04 23:37
那就是说不管私有成员里面是什么样的成员,用对象去调用都是错的了!是这样么?
#5
zhm4122008-01-05 04:20
原帖由 [bold][underline]小说贝斯[/underline][/bold] 于 2008-1-4 23:37 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1171507&ptid=195933][/url]
那就是说不管私有成员里面是什么样的成员,用对象去调用都是错的了!是这样么?

是这样的。
#6
2003dfg2008-01-05 16:46
出错原因
A  a

这一句 在类外使用了私有成员就会出错!
#7
phb7112008-01-05 18:34
回复 4# 的帖子
基本上可以这样说
但是也有人说可以将private里面的东西弄出来
包括#define private public什么的

对于私有成员只能为该类的成员函数调用(构造函数为的是让别人使用该类,所以没有看见过将其私有的)
对于一些中间函数可以私有化,这就是C++的安全性
#8
中学者2008-01-05 18:50
LS似乎看过《expectional C++ style》~
#9
随心2008-01-06 16:49
构造函数是在创建类对象时调用的,你把它定义为私有的。在创建类对象时调用一个类的私有函数但然是错误的了。
#10
sunkaidong2008-01-06 20:45
你可以用静态函数去初始化.
#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年的软件考试的下午题目,有点像.
#11
ironhx2008-01-09 20:12
``11
构造函数本来就是大家用来调用了,不要设置为私有
#12
waferheim2008-01-10 10:22
A a; 调用了 A(){x=1;y=2;}
你把 A(){x=1;y=2;}设为私有当然出错了~~~
2楼已经正结解了~
#13
zhouqingwuji2008-01-10 15:37
原帖由 [bold][underline]小说贝斯[/underline][/bold] 于 2008-1-4 23:37 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1171507&ptid=195933][/url]
那就是说不管私有成员里面是什么样的成员,用对象去调用都是错的了!是这样么?


太对了,,就是这样的,友元可以调用·~·
#14
sunkaidong2008-01-10 20:51
用静态函数或友元函数
#15
ondy2008-01-10 21:54
因为私有
1