在类构造函数中调用包含类的构造函数

时间:2013-11-27 11:59:02

标签: c++ constructor static

在类argList中,构造函数是指令

args_[0] = fileName(argv[0]);

在搜索方法fileName(...)时,结果表明它应该是类fileName的构造函数:

inline Foam::fileName::fileName(const char* str) //Construct as copy of character array.
: string(str)    //Construct as copy of character array.
{
    stripInvalid();    //Strip invalid characters from the given string.
}

两个问题:

  1. 是否真的是调用类fileName的构造函数?
  2. fileName的构造函数如果被调用则不是静态的 像这样?
  3. 问候 streight

3 个答案:

答案 0 :(得分:3)

  1. 是的 - 这是fileName类的真正构造函数 - 没有返回值,方法的名称与类的名称相同。

  2. 这不是对构造函数的调用,而是构造函数的定义(我猜::让你感到困惑):

    inline Foam::fileName::fileName(const char* str) //Construct as copy of character array.
    

    这是对构造函数的调用:

    args_[0] = fileName(argv[0]);
    

    C ++中没有静态构造函数。

答案 1 :(得分:3)

  

“1。它真的是名为fileName的构造函数吗?

是。调用构造函数是因为它为args_ [0]分配了一个fileName类的新实例。

  

“2。如果像这样调用它,那么fileName的构造函数是不是静态的?

没有。构造函数不能是静态的。这是构造对象的正确方法之一。

答案 2 :(得分:2)

  

它真的是类fileName的构造函数吗?

间接地,是的。对于类T,表达式T(args)创建一个临时对象,并通过为参数调用合适的构造函数来初始化它。

在这种情况下,此构造函数匹配参数类型,因此使用的是。

  

fileName的构造函数是不是静态的,如果像这样调用它?

不,构造函数不能声明为static。它们总是可以用来初始化命名变量或像这样的临时变量,没有特殊的声明。