OOP:将原始类型传递给期望对象的函数

时间:2015-10-27 14:26:00

标签: c++ oop

是否可以将构造函数参数传递给函数而不是类对象本身?

根据以下代码

    #include <iostream>
    #include <string>


    class CL{
     public:
         int id;
       CL(){ 
           std::cout << "CL () Constructor "  << std::endl;
       }
       CL(const char * name){ 
           std::cout << " CL(const char * name) Constructor  Called " << std::endl;
       }
       CL(int i){ 
           id = i;
           std::cout << "CL(int i) Constructor  Called " << id << std::endl;

       }

       void print(){
           std::cout << "print method Called " << id << std::endl;
       }
    };

    void myfunc(CL pp){
        pp.print();
    }

    int main(int argc,char **argv){
        myfunc(10);
    }

我将整数传递给函数&#34; myfunc&#34;而不是类实例,它工作。我认为它实时实例化了对象。

输出

CL(int i) Constructor  Called 10
print method Called 10
是不是这么模棱两可?至于我重载函数的相同代码 &#34; MYFUNC&#34;如

myfunc(int i) {
    std::cout << i << std::endl;
}

它会输出     10

并忽略采用类对象的函数原型

1 个答案:

答案 0 :(得分:3)

这称为隐式转换,适用于采用单个参数的所有构造函数。如果您不希望这样,请声明构造函数explicit

class CL {
 public:
   int id;

   CL(): id{0} {}
   explicit CL(int i): id{i} {}
};

void myfunc(CL pp) {
    // ... 
}

int main(int, char) {
    myfunc(10); // <- will fail to compile
}