基类是私有构造函数 子类如何继承?

wjc_nj 2009-04-29 02:22:47
class A
{
private:
A();
A(const A&);

public:
~A();
};

class B public:A
{
//B的构造函数怎么写?
//
};

谢谢大家
...全文
1242 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
SimonYeung 2009-04-29
  • 打赏
  • 举报
回复
声明为友元试试
pathuang68 2009-04-29
  • 打赏
  • 举报
回复
A的构造函数是私有的,那么B是不能继承的,但你可以设计Singleton
lpf000 2009-04-29
  • 打赏
  • 举报
回复
用友元声明,
wjc_nj 2009-04-29
  • 打赏
  • 举报
回复
谢楼上的
OenAuth.Core 2009-04-29
  • 打赏
  • 举报
回复
还有单例模式设计的原因就是不想让别人继承,你还用B去继承干嘛?
OenAuth.Core 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lianshaohua 的回复:]
引用 7 楼 hairetz 的回复:
想知道你把A构造设为私有,是什么意思?想设计成什么模式?


单例模式
[/Quote]

单例模式应该有一个对外接口吧?、

class Singelton
{
private:
Singelton(){}
static Singelton* singel;

public:
static Singelton* GetInstance()
{
if(singel == NULL)
{
singel = new Singelton();
}
return singel;
}

};
Singelton* Singelton::singel = NULL;

客户端:
int main()
{
Singelton* s1=Singelton::GetInstance();
return 0;
}


漁_夫 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jackzhhuang 的回复:]
把类的构造函数声明为私有,可以说就是为了防止他人继承,防止随便被构造。

楼主可以露个static接口出来,在其中构造A(用new),然后在B中使用。也就是改成包含关系。
[/Quote]

同意
jackzhhuang 2009-04-29
  • 打赏
  • 举报
回复
不好意思,忘了改了,B不能在继承A了
jackzhhuang 2009-04-29
  • 打赏
  • 举报
回复
class A 
{
private:
A();
A(const A&);

public:
~A();
static A* GetA()
{
static A a;
return &a;
}
};

class B public:A
{
A * m_pA;
public:
B():m_pA(A::GetA())
{}
};


单件模式
jackzhhuang 2009-04-29
  • 打赏
  • 举报
回复
把类的构造函数声明为私有,可以说就是为了防止他人继承,防止随便被构造。

楼主可以露个static接口出来,在其中构造A(用new),然后在B中使用。也就是改成包含关系。
liliangbao 2009-04-29
  • 打赏
  • 举报
回复
这样:
class A 
{
private:
A(){}
A(const A&){}

public:
A(int a){}//有这个接口
~A(){}
};
//A类中不可以改动
class B :public A
{
//以下B的构造函数怎么写?
public:
B():A(0){}//error
B(int a):A(a){}// error
B(B*pc):A(0){}//error
};
wangyadong 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wjc_nj 的回复:]
class A
{
private:
  A();
  A(const A&);

public:
  A(int a);//有这个接口
  ~A();
  ……
};
//A类中不可以改动
class c;
class B public:A
{
  //以下B的构造函数怎么写?
public:
  B();//error
  B(int a);// error
  B(C*pc);//error



};

[/Quote]
你这个肯定错误啊,在构造B的对象的时候会调用A的构造函数,但是A的是私有的不能调用
A如果不能改动,那就一点用没有了
lori227 2009-04-29
  • 打赏
  • 举报
回复
单例模式 也需要有个对外的接口~~~
wjc_nj 2009-04-29
  • 打赏
  • 举报
回复
class A
{
private:
A();
A(const A&);

public:
A(int a);//有这个接口
~A();
……
};
//A类中不可以改动
class c;
class B public:A
{
//以下B的构造函数怎么写?
public:
B();//error
B(int a);// error
B(C*pc);//error



};
ztenv 版主 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
想知道你把A构造设为私有,是什么意思?想设计成什么模式?
[/Quote]

单例模式
OenAuth.Core 2009-04-29
  • 打赏
  • 举报
回复
无聊...
  • 打赏
  • 举报
回复
想知道你把A构造设为私有,是什么意思?想设计成什么模式?
liliangbao 2009-04-29
  • 打赏
  • 举报
回复
A类没有接口,那怎么使用呀~
连构造函数都是私用的,那怎么调用构造函数来初始化对象~
这样的A是不可用的~
Paradin 2009-04-29
  • 打赏
  • 举报
回复
对呀还有友元
Paradin 2009-04-29
  • 打赏
  • 举报
回复
要么别用继承要么给A加个
加载更多回复(3)

65,183

社区成员

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

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