刚开始学C++学到类与对象的构造以及析构函数的时候,查到下面这么一句话。
析构函数必须在public权限下,因为他在程序结束时候由系统调用,构造函数的权限没有要求。
后来发现如果构造函数在private权限下,用常用的直接创建对象方式是创建不出来的,提示构造函数不可访问。
即以下两种创建方式不可以使用。
class TestClass
{
private:
TestClass(){
}
};
int main()
{
// TestClass tc;
// TestClass * tcptr = new TestClass;
return 0;
}
不过构造函数确实可以放在private权限下,此时需要使用public的静态成员函数new一个对象,并将指针返回。
必须要是公共权限的静态成员函数,因为公共权限才能在类外调用,静态成员函数才能通过类名::函数名()
的方式调用
class TestClass
{
private:
TestClass(){
}
public:
// 一个公共权限的静态函数,在堆区建立一个对象,返回其指针
static TestClass* get()
{
return new TestClass;
}
};
int main()
{
// TestClass tc;
// TestClass * tcp = new TestClass;
// 通过 类名:静态函数名 的方式建立对象
TestClass* tcptr = TestClass::get();
return 0;
}
构建函数权限为私有的类无法作为父类,因为在子类构造的时候会先构造父类,而这个类的构造函数无法外部调用。
如果发现创建对象的时候提示构造函数无法访问,可以考虑是否漏掉了public关键字,导致自定义的构造函数被放在了私有权限下。