如何在C ++中将对象作为参数传递?

时间:2012-10-16 15:30:57

标签: c# c++ object types arguments

如果我们在C#中有以下简单代码:

class Program
{
     static void Main(string[] args)
     {
          string x = "Hello World";
          test(x);
          int y = 101;
          test(y);
          Console.ReadKey();
      }

      static void test(object val)
      {
          Console.WriteLine(val);
      }
}  

所以,我们有一个引用类型对象作为参数 - 工作正常。如何在C ++中做类似的事情?

OT:如果没有直接输入,我们可以使用 var 关键字,在C ++中存在关键字 auto 。在这里有任何类似的参考类型,如对象或一些方法/技巧来证明它吗?

3 个答案:

答案 0 :(得分:3)

在C ++中,并非所有对象都来自公共基类型;没有通用的运行时多态性。但是,您可以通过模板使用编译时多态来获得所需的行为。

#include <iostream>
#include <string>

template <class T> void test(const T& val)
{
    std::cout << val << "\n";
}


int main(int ac, char **av)
{
    std::string x = "Hello World";
    test(x);
    int y = 101;
    test(y);
}

答案 1 :(得分:1)

C ++没有类似于C#的System.Object的“根类型”。您可以使用boost::any来模拟该概念,但这需要使用外部库。

就通过引用传递参数而言,您可以使用MyType &myTypeRef语法在C ++中通过引用传递,或者通过指针MyType *myTypePtr传递。

答案 2 :(得分:0)

由于C ++没有为所有类型强制执行公共基类型,因此您无法完全执行相同的操作。但是,您可以使用模板来实现相同的目标:

 void fn(....)
 {
      string x = "Hello World";
      test(x);
      int y = 101;
      test(y);
  }

  template <typename T>
  void test(const T& val)
  {
      cout << val;
  }