需要帮助使用C ++类继承

时间:2016-06-18 14:53:42

标签: c++ class inheritance

我正在尝试运行以下C ++代码来理解使用MS Visual Studio 15的类继承。在构建并运行代码之后,我收到一条消息,说MS VS已停止工作。如果有人能帮我理解我做错了什么,我真的很感激。

#include<cstdio>
#include<string>
#include<conio.h>
using namespace std;

// BASE CLASS
class Animal {
private:
    string _name;
    string _type;
    string _sound;
    Animal() {};     
protected: 
    Animal(const string &n, const string &t, const string &s) :_name(n), _type(t), _sound(s) {};    
public: 
    void speak() const;     
};

void Animal::speak() const {
    printf("%s, the %s says %s.\n", _name, _type, _sound);
}

// DERIVED CLASSES 
class Dog :public Animal { 
private:
    int walked;
public:
    Dog(const string &n) :Animal(n, "dog", "woof"), walked(0) {};
    int walk() { return ++walked; }
};


int main(int argc, char ** argv) {    
    Dog d("Jimmy"); 
    d.speak();          
    printf("The dog has been walked %d time(s) today.\n", d.walk());        
    return 0;
    _getch();
}

3 个答案:

答案 0 :(得分:1)

printf("%s, the %s says %s.\n", _name, _type, _sound);

您不能std::string使用printf()

使用

printf("%s, the %s says %s.\n", _name.c_str(), _type.c_str(), _sound.c_str());

代替。

我宁愿建议使用std::cout来使所有内容在c ++中无缝地工作。

答案 1 :(得分:1)

问题是speak方法尝试使用printf来打印字符串对象。

printf function is not suitable for printing std::string objects。它适用于char数组,用于表示C语言中的字符串。 如果你还想使用printf,你需要将你的字符串转换为char数组。这可以按如下方式完成:

printf("%s, the %s says %s.\n", _name.c_str(), _type.c_str(), _sound.c_str());

更优雅的解决方案是在&#34; C ++&#34;中打印数据。方式,使用std :: cout:

//include declaration at the top of the document
#include <iostream>
...
//outputs the result
cout <<_name + ", the " + _type + " says " + _sound << "." << endl;

答案 2 :(得分:0)

%sstd::string的{​​{3}}期望printf,而不是printf("%s, the %s says %s.\n", _name, _type, _sound);,它们不是同一回事。所以const char*不起作用,不应该编译。

您可以使用c-style null-terminated byte string,这将返回printf("%s, the %s says %s.\n", _name.c_str(), _type.c_str(), _sound.c_str()); 。如

std::cout

或者std::string使用cout << _name << ", the " << _type << " says " << _sound << ".\n"; ,如:

AND COL_INGREDIENTI like '%hi%' and COL_INGREDIENTI like '%try%'