假設我有一個基類對象的向量,但用它來包含一些派生類。我想檢查該矢量的成員是否屬於特定的類。我怎麼做?我可以考慮製作一個接受基類參數的派生類模板,但我不知道如何將類與對象進行比較。如何在C++中檢查對象的類?
1
A
回答
0
可以使用dynamic_cast
但是如果你需要做到這一點,那麼你可能有一個設計問題。你應該使用多態或模板來解決這個問題。
2
0
試試下面這個例子:
#include <iostream>
using namespace std;
#include <typeinfo>
class A
{
public:
virtual ~A()
{
}
};
class B : public A
{
public:
virtual ~B()
{
}
};
void main()
{
A *a = new A();
B *b = new B();
if (typeid(a) == typeid(b))
{
cout << "a type equals to b type\n";
}
else
{
cout << "a type is not equals to b type\n";
}
if (dynamic_cast<A *>(b) != NULL)
{
cout << "b is instance of A\n";
}
else
{
cout << "b is not instance of A\n";
}
if (dynamic_cast<B *>(a) != NULL)
{
cout << "a is instance of B\n";
}
else
{
cout << "a is not instance of B\n";
}
a = new B();
if (typeid(a) == typeid(b))
{
cout << "a type equals to b type\n";
}
else
{
cout << "a type is not equals to b type\n";
}
if (dynamic_cast<B *>(a) != NULL)
{
cout << "a is instance of B\n";
}
else
{
cout << "a is not instance of B\n";
}
}
相關問題
- 1. 如何檢查什麼類是在C#中的對象
- 2. 如何在C++/CLI中檢查對象的類型?
- 3. 如何檢查對象類
- 4. 如何檢查C++中的對象類型
- 5. 如何檢查一個對象是否爲類c的類型?
- 6. 如何檢查客觀的c對象?
- 7. 如何檢查的對象是基類
- 8. 如何檢查T對象的類型?
- 9. 檢查類對象
- 10. 如何用LLDB檢查C++對象的實際類?
- 11. C# - 如何檢查是否需要構造類型的對象?
- 12. 如何檢查對象類型
- 13. 如何檢查對象屬性類型?
- 14. 如何檢查目標C中初始化的對象是什麼類C
- 15. 如何檢查對象的類是否在Dart中包含mixin?
- 16. 如何檢查對象在模板中的哪個子類?
- 17. 如何在運行時檢查TypeScript中的對象類型?
- 18. 如何檢查對象在Ruby中
- 19. 如何檢查派生類中對象的類型名稱?
- 20. c#如何檢查對象是否屬於某種類型
- 21. 如何檢查對象是否在Domain對象的集合中?
- 22. 如何在C++中檢查null類
- 23. 如何檢查對象在C#.NET 3.5中爲空?
- 24. 如何在C中檢查對象是否是數字#
- 25. 如何在C#.NET 3.5中檢查對象爲空或空?
- 26. 如何檢查對象實例是從抽象類在PHP
- 27. 如何檢查對象是Application對象
- 28. 如何檢查對象是對象
- 29. 如何在Python中正確檢查對象類型?
- 30. 檢查腳本中對象的類型?
這裏是一個可能的地方開始:http://stackoverflow.com/questions/351845/finding-the-type-of-an-object-in-c – MikeB
如果你有一個基類對象的向量,你沒有任何派生類型的對象;當它們被存儲在載體中時它們被切成片。 –
真正的問題是爲什麼你需要知道類型。往往不是這是一個設計缺陷。 –