Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c++;_C++_Oop_Inheritance - Fatal编程技术网

C++ 如何在c++;

C++ 如何在c++;,c++,oop,inheritance,C++,Oop,Inheritance,例如,我们有一个动物类,我们创建了一些其他类,如狮子类、老虎类等。我已经制作了一个动物类的列表,我想横切该列表,并根据列表中每个成员的类类型处理该列表 Class Animal Class Tiger :: public Animal{} Class Lion :: public Animal{} list<Animal> l; Tiger T; Lion L; l.push_back(T); l.push_back(L); if the top member of the list

例如,我们有一个动物类,我们创建了一些其他类,如狮子类、老虎类等。我已经制作了一个动物类的列表,我想横切该列表,并根据列表中每个成员的类类型处理该列表

Class Animal
Class Tiger :: public Animal{}
Class Lion :: public Animal{}
list<Animal> l;
Tiger T;
Lion L;
l.push_back(T); l.push_back(L);
if the top member of the list is Tiger print"ITs a tiger"
else print"something"
类动物
老虎类::公共动物{}
类狮子::公共动物{}
清单l;
老虎T;
狮子L;
l、 推回(T);l、 向后推(l);
如果列表中的第一名是老虎,则打印“Itsatiger”
否则打印“某物”
简单地说,我想检查创建的实例的类型。我不知道怎么做。

这就是所谓的,它不是好的编码实践

这就是说,如果你绝对想知道一个类的类型,你可以这样做

if (typeid(myanimal) == typeid(Tiger)) {
    // Do something tiger-like
}
在您的案例中,我建议为所有
动物
提供一个公共接口,例如
sayHello()
方法。你会的

class Animal {
    void sayHello() = 0;
    // Other things
}
Tiger
中,这将是

Tiger::sayHello() {
    cout << "Hello I'm a Tiger!" << endl;
}
这就是所谓的,它不是好的编码实践

这就是说,如果你绝对想知道一个类的类型,你可以这样做

if (typeid(myanimal) == typeid(Tiger)) {
    // Do something tiger-like
}
在您的案例中,我建议为所有
动物
提供一个公共接口,例如
sayHello()
方法。你会的

class Animal {
    void sayHello() = 0;
    // Other things
}
Tiger
中,这将是

Tiger::sayHello() {
    cout << "Hello I'm a Tiger!" << endl;
}

您可以检查类型(
typeid
),可以,但不需要

您只需持有一个
std::list
,并在
Animal
中拥有一个
virtual
方法。这样你就利用了多态性

class Animal
{
public: 
    virtual void print() = 0;
};
class Tiger : Animal
{
    virtual void print() { std::cout << "I'm a tiger"; }
};

Animal* pA = new Tiger;
pA->print(); // prints tiger
类动物
{
公众:
虚空打印()=0;
};
虎类:动物
{
虚拟空打印(){std::cout print();//打印老虎

您可以检查类型(
typeid
),是的,但不需要

您只需持有一个
std::list
,并在
Animal
中拥有一个
virtual
方法。这样您就可以利用多态性

class Animal
{
public: 
    virtual void print() = 0;
};
class Tiger : Animal
{
    virtual void print() { std::cout << "I'm a tiger"; }
};

Animal* pA = new Tiger;
pA->print(); // prints tiger
类动物
{
公众:
虚空打印()=0;
};
虎类:动物
{
虚拟空打印(){std::cout print();//打印老虎

使用动态强制转换并检查结果是否有效。 但是!!!!!!!您通常会发现这是一种不好的做法:在您的情况下,最好在基类中声明虚函数 虚拟std::string printMe()常量=0;
并在每个类中实现它。

使用动态强制转换并检查结果是否有效。 但是!!!!!!!您通常会发现这是一种不好的做法:在您的情况下,最好在基类中声明虚函数 虚拟std::string printMe()常量=0;
如果你想检查类型,你的设计似乎是错误的,你应该考虑重新设计它。要知道类型,你可以使用<代码> Type信息>代码> < DealCysCase。ListCo需要重新访问设计。你可能需要的是虚拟方法。这是访问者模式的扩展。可能的复制品。如果你想检查你的设计似乎是错误的,你应该考虑重新设计它。要知道它的类型,你可以使用<代码> Type信息>代码> <动态代码> <代码>。你需要重新访问这个设计。你可能需要的是虚拟方法。这个扩展是访问者模式。矢量的简单副本可以简单地存储Anima。ls不能保存ex.Tiger。你必须将其存储为类似ptr的结构。请不要使用指针向量。指针没有所有权语义。向量只存储动物,不能保存ex.Tiger。你必须将其存储为类似ptr的结构。请不要使用指针向量。指针没有所有权语义。