Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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++非常陌生。我有这样一种情况:我有一个基类,它包含两个虚函数(不是纯函数)。这个类有一个派生类,我在其中实现了这些虚拟函数。现在,在main()函数中,我创建了一个指向基类指针对象的指针。现在使用这个对象如何访问派生类对象和函数_C++_Pointers_Inheritance_Virtual Functions - Fatal编程技术网

将派生类对象分配和访问到基类“;指针指向指针";C++; 我对C++非常陌生。我有这样一种情况:我有一个基类,它包含两个虚函数(不是纯函数)。这个类有一个派生类,我在其中实现了这些虚拟函数。现在,在main()函数中,我创建了一个指向基类指针对象的指针。现在使用这个对象如何访问派生类对象和函数

将派生类对象分配和访问到基类“;指针指向指针";C++; 我对C++非常陌生。我有这样一种情况:我有一个基类,它包含两个虚函数(不是纯函数)。这个类有一个派生类,我在其中实现了这些虚拟函数。现在,在main()函数中,我创建了一个指向基类指针对象的指针。现在使用这个对象如何访问派生类对象和函数,c++,pointers,inheritance,virtual-functions,C++,Pointers,Inheritance,Virtual Functions,我只希望基类的指针对象应该用来访问派生类对象 基类: class another { public: virtual void setName(){}; virtual string getName(){}; }; int main() { another **an; *an = new use(); an->setName(); //getting error cout<<an->getName()<&l

我只希望基类的指针对象应该用来访问派生类对象

基类:

class another
{
    public:
    virtual void setName(){};
    virtual string getName(){};
};
int main()
{
    another **an;
    *an = new use();
    an->setName();  //getting error
    cout<<an->getName()<<endl; //getting error
    return 0;

}
派生类

class use: public another
{
    public:
        string str;
    void setName()
        {
            str = "USE CLASS";
        }
        string getName()
        {
            return str;
        }
};
MY main()函数:

class another
{
    public:
    virtual void setName(){};
    virtual string getName(){};
};
int main()
{
    another **an;
    *an = new use();
    an->setName();  //getting error
    cout<<an->getName()<<endl; //getting error
    return 0;

}
intmain()
{
另一个**安;
*an=新用途();
->setName();//获取错误

cout
一个
是指向另一个
的指针
*an
返回一个指向另一个的指针。所以您希望
(*an)->setName();
像这样:

int main()
{
    another **an;
    *an = new use();
    (*an)->setName();  //getting error
    cout<<(*an)->getName()<<endl; //getting error
    return 0;
}
intmain()
{
另一个**安;
*an=新用途();
(*an)->setName();//获取错误

cout
一个
是指向另一个
的指针
*an
返回一个指向另一个的指针。所以您希望
(*an)->setName();
像这样:

int main()
{
    another **an;
    *an = new use();
    (*an)->setName();  //getting error
    cout<<(*an)->getName()<<endl; //getting error
    return 0;
}
intmain()
{
另一个**安;
*an=新用途();
(*an)->setName();//获取错误
库特
指针
一个
未初始化,无法取消引用。使用双指针(指向指针的指针)在这里没有实际意义。在这种情况下,tit所做的只是为代码添加另一个级别的引用。取消引用此类指针的表达式会导致指向类“另一个”的指针值,存储在…何处?您从未创建过该存储,所以此类操作是UB

法典的法律变体:

int main()
{
    another **an = new another*(); // creating storage for pointer
    *an = new use();
    (*an)->setName();  
    cout<<(*an)->getName()<<endl; 
    delete *an;  // don't rely on OS to do so.
    delete an;
    return 0;
}


int main()
{
    another **an = new another*(new use()); // doing this in one line
    // storage of *an would be value-initialized by value returned
    // from 'new use()' instead of default initialization
    (*an)->setName();  
    cout<<(*an)->getName()<<endl; 
    delete *an;  // don't rely on OS to do so.
    delete an;
    return 0;
}

int main()
{
    another *an = new use(); 
    // We don't need another pointer~ use an reference where required?

    an->setName();  
    cout<<an->getName()<<endl; 
    delete an;  // don't rely on OS to do so.
    return 0;
}
不能创建此类类或派生类的实例,但它提供了您正在学习的“样板”机制

指针
一个
未初始化,无法取消引用。使用双指针(指向指针的指针)在这里没有实际意义。在这种情况下,tit所做的只是为代码添加另一个级别的引用。取消引用此类指针的表达式会导致指向类“另一个”的指针值,存储在…何处?您从未创建过该存储,所以此类操作是UB

法典的法律变体:

int main()
{
    another **an = new another*(); // creating storage for pointer
    *an = new use();
    (*an)->setName();  
    cout<<(*an)->getName()<<endl; 
    delete *an;  // don't rely on OS to do so.
    delete an;
    return 0;
}


int main()
{
    another **an = new another*(new use()); // doing this in one line
    // storage of *an would be value-initialized by value returned
    // from 'new use()' instead of default initialization
    (*an)->setName();  
    cout<<(*an)->getName()<<endl; 
    delete *an;  // don't rely on OS to do so.
    delete an;
    return 0;
}

int main()
{
    another *an = new use(); 
    // We don't need another pointer~ use an reference where required?

    an->setName();  
    cout<<an->getName()<<endl; 
    delete an;  // don't rely on OS to do so.
    return 0;
}

无法创建此类类或不重写这些方法的派生类的实例,但它提供了您正在学习的“样板”机制。

谢谢,伙计。但是当我使用相同的main()时您在上面提供的函数中,我遇到了一个错误,就像使用了未初始化的变量“an”。您能告诉我如何初始化它吗?谢谢,伙计。但是当我使用相同的main()时您在上面提供的函数中,我遇到了一个错误,比如使用了未初始化的变量“an”。您能告诉我如何初始化它吗?非常好。谢谢mate非常好。谢谢mate