2

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が存在します。ここに、オブジェクトやそれを証明するための何らかの方法/トリックのような同様の参照型がありますか?

4

3 に答える 3

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);
}
于 2012-10-16T15:35:14.497 に答える
1

C ++には、C#のような「ルートタイプ」はありませんSystem.Object。を使用boost::anyして概念をエミュレートできますが、それには外部ライブラリを使用する必要があります。

参照によってパラメーターを渡す限り、MyType &myTypeRef構文を使用してC ++で参照を渡すか、ポインターを渡すことができますMyType *myTypePtr

于 2012-10-16T15:35:02.713 に答える
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;
  }
于 2012-10-16T15:36:26.370 に答える