如何创建具有私有构造函数的类的对象

时间:2014-07-04 13:14:05

标签: c++ oop

我已经获得了创建类的赋值,但构造函数应该是私有的。现在我们必须使用链接列表存储列表,但是我在声明我创建的类的对象时遇到了问题。

 class Faculty
{
private :
    // Personal Information
    string Name;
    string DateOfBirth;
    string Address;
    int Phone;

    // Academic Information
    string Experience;
    string Department;
    string *coursesTeaching;
    string *coursesCanTeach;
    string areaOfInterest;

    // Managerial information
    float salary;
    string DateOfJoining;
    string Room;
    string ParkingLot;

    Faculty ();
    Faculty (string, string, string, int, string, string, string, float, string,
             string, string);

 public :

    //copy constructor
    Faculty (const Faculty &F);

    //static function for making objects
    static Faculty* create_faculty (string, string, string, int, string,
                                string, string, float, string, string, string);

    // setters
    void setName(string);
    void setDateOfBirth (string);
    void setAddress(string);
    void setPhone(int);

这是我的静态对象创建函数的CPP文件定义。

 //static function for making objects
 Faculty* Faculty :: create_faculty (string n, string d, string a, int p,
                                     string e, string dp, string ar, float s, 
                                     string doj, string r, string pl)
{
    Faculty* F1 = new Faculty(n, d, a, p, e, dp, ar, s, doj, r, pl);
    return F1;
}

这是主要的。

#include "AcademicStaff.h"
#include "faculty.h"
#include <iostream>
#include <string>
using namespace std;

struct FacultySt
{
    Faculty *f; 
    f = Faculty :: create_faculty (string n, string d, string a, int p, string e,
                                        string dp, string ar, float s, string doj,
                                        string r, string pl);

      FacultySt* next;
};

如何创建Faculty类的对象?我这样做的方式,它不起作用。

2 个答案:

答案 0 :(得分:1)

  1. Faculty *f;      //1
    f =/*anything*/; //2
    

    我认为我引用的第二行是合法的。它应该在构造函数中完成 或者,从C ++ 11开始,您可以编写

    Faculty *f=/*something*/;
    
  2. 到底是什么意思? :

    Faculty :: create_faculty (string n, string d, string a, int p, string e,
                                    string dp, string ar, float s, string doj,
                                    string r, string pl);
    

    它不是有效的函数调用,你应该传递参数,而不是...变量&#39;声明(?),或者它是什么。

  3. 不要使用std::string执行功能,而是执行const std::string& - 复制std::string可能会很昂贵。

  4. 您不需要功能Faculty::create_faculty,您可以写

    Faculty *f=new Faculty(/*here the arguments*/);
    

答案 1 :(得分:0)

我认为您正在尝试做的一个简单的工作示例:

#include <iostream>

class X {
public:
  static X* factoryMethod(int v) {
    return new X(v); }
  int get() {
    return n; }
private:
  X(int v) : n(v) {};
  int n; };

int main(int, char* []) {
  X* x = X::factoryMethod(5);
  std::cout << x->get() << std::endl;
  delete x;
  return 0; }