在C ++中使用带有类的指针

时间:2013-12-02 04:28:50

标签: c++ class pointers

我熟悉创建类并使用点符号来访问对象的函数。我不熟悉使用指针做同样的记法。请查看我的代码并建议我如何更改类定义中的代码, not main。

主:

Pet * p = new Pet( "Sunset", "Cat", "meow..." );

cout << "The " << p->getVariety( ) << " " << p->getName( ) << " speaks by saying " << p->spea( ) << endl;

课程:

class Pet
{
public:
Pet( );
Pet( std::string name, std::string variety, std::string says )
{
    using namespace std;
    myName = name;
    myVariety = variety;
    howIspeak = says;
}

std::string getName( ) const
{
    return myName;
};
std::string getVariety( ) const
{
    return myVariety;
};

virtual void speak( );

protected:
std::string myName;
std::string myVariety;
std::string howIspeak;
};

3 个答案:

答案 0 :(得分:1)

我想,这是

virtual void speak( );

in

cout << "The " << "..." << p->speak( ) << endl;

导致错误消息。您无法将void值输出到std::ostream

据推测,应该是

virtual std::string speak();

答案 1 :(得分:1)

  

请查看我的代码并建议我如何更改类定义中的代码,而不是main。

using namespace std;在那里没用,只需删除即可。

然后,您拥有virtual个方法和protected个成员,这表明您愿意从该类继承:要么不要也要定义virtual析构函数。

此外,您从主要调用的speak成员函数返回void,这不是您要传递给operator<< std::cout的类型。< / p>

最后:你为什么要使用 nake指针和动态分配?除非你绝对被迫,否则不要使用它,即使这样,也要使用std::shared_ptrstd::unique_ptr(或任何其他智能指针系列):

std::unique_ptr<Pet> ptr(new Pet( "Sunset", "Cat", "meow..." ));

在该行之后,ptr的行为几乎与任何其他指针一样,除非它完成后将自行清理(将调用delete)(当它离开范围时)。 / p>

答案 2 :(得分:0)

我建议阅读Lippmann等人的C ++入门书“C ++ Primer(第4版)”。或者找到关于C ++的在线教程。您要解决的问题需要比SO Q和A中的相关理解更多。