继续讨论关于构造函数为private的问题

zhouliang0806 2012-03-26 06:53:57

Class A{
private:
A();
~A();
int m_a;
};
int main()
{
....
A a; //如此定义a
....
}

上面实例化A对象有问题吗?
能够调用私有的构造函数吗?
...全文
86 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
anew_1916 2012-03-26
  • 打赏
  • 举报
回复
2楼实在破坏类的封装特性,而且这样做造成内存泄漏
zhouliang0806 2012-03-26
  • 打赏
  • 举报
回复
理解了,强悍。
pathuang68 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhouliang0806 的回复:]
C/C++ code

Class A{
private:
A();
~A();
int m_a;
};
int main()
{
....
A a; //如此定义a
....
}

上面实例化A对象有问题吗?
能够调用私有的构造函数吗?
[/Quote]

有问题。

构造函数设为private的目的,就是不让外部的代码调用它,从而使得外部的代码不能产生该类的对象。但类内部的函数是可以调用它的。这种情况的典型的例子就是在Singleton模式中,构造函数必须是私有的,然后用一个静态成员函数来调用私有的构造函数,并返回一个这个类的对象或对象指针,就像2楼给出的那段代码。

Singleton的目的就是让那个类最多只有一个对象(实例)。
翟码农 2012-03-26
  • 打赏
  • 举报
回复
建议体系的把private,protect,public的局限性记一下。
private是只有类内部的操作函数才能调用,
protect是不仅类内部的操作函数才能调用,不同类的操作函数也能调用它
public就更广泛了,包括protect范围外,还可以在所有类外(比如main函数)调用它。
sducn1 2012-03-26
  • 打赏
  • 举报
回复
谁帮我把我的帖子顶一下

http://topic.csdn.net/u/20120324/10/a128ed09-e604-4fb7-86f4-305c320566f0.html
newfarmerchi 2012-03-26
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;



class A{
private:
A(){m_a=0;};
~A(){};
int m_a;
public:
static A* getInstance ()
{

A* instance = new A();
return instance;
}
void print()
{
cout<<m_a<<endl;
cout<<"Hello World!"<<endl;
}

};
int main()
{
//....
A *a=A::getInstance (); //如此定义a
a->print();

//....
return 0;
}














疯狂-的-蜗牛 2012-03-26
  • 打赏
  • 举报
回复
不能,在类的外部不能调用类的私有成员函数

64,649

社区成员

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

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