构造函数权限为private怎么创建对象

刚开始学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关键字,导致自定义的构造函数被放在了私有权限下。

猜你喜欢

转载自blog.csdn.net/YanHS_/article/details/129432742