我是初学者,在这段代码中无法弄清楚我做错了什么。结果以无限循环(我认为)结束,不打印任何东西。我故意离开函数speak()非虚拟,我知道我只会打印Animal的数据。
if conditionfails{
heightconstOfView1.constant = 0
}
else{
heightconstOfView2.constant = 0
}
有人可以帮忙吗?我可能在这里犯了一个非常愚蠢的错误。请告诉我有什么问题?
答案 0 :(得分:2)
在你的代码中,你犯了两个重大错误。
在Animal,Dog和Cat课程中,您有三种说话功能。但是你将它们声明为字符串类型函数。但唯一输出一些文字,但不返回任何东西。你必须将它们改为无效。或者您可以返回文本而不是输出文本。
在main函数中,您已编写cout << ptr->speak() << endl;
来输出文本。但是你的说话功能不会返回任何字符串输出。它输出文本本身。所以,你必须写ptr->speak();
来输出动物的言语。你不需要 cout 。
我在下面给出了两个示例代码。你可以选择其中任何一个。两者都很好。
示例#1:使用void(主要没有cout)
#include <iostream>
#include <string>
using namespace std;
class Animal
{
protected:
string m_name;
string m_speak;
public:
Animal(string name, string speak = "???"): m_name(name), m_speak(speak){}
void speak(){cout << m_name << " speaks " << m_speak;}
};
class Dog: public Animal
{
private:
string m_dspeak;
public:
Dog(string name, string speak = "Woof!"): Animal(name), m_dspeak(speak){}
void speak(){cout << m_name << " speaks " << m_dspeak;}
};
class Cat: public Animal
{
private:
string m_cspeak;
public:
Cat(string name, string speak = "Meow!"): Animal(name), m_cspeak(speak){}
void speak(){cout << m_name << " speaks " << m_cspeak;}
};
int main()
{
Cat Fred("Fred");
Dog Stuffy("Stuffy");
Animal *ptr = &Fred;
ptr->speak();
Animal *ptr2 = &Stuffy;
ptr2->speak();
}
示例#2:在函数中使用return,在main
中使用cout#include <iostream>
#include <string>
using namespace std;
class Animal
{
protected:
string m_name;
string m_speak;
public:
Animal(string name, string speak = "???"): m_name(name), m_speak(speak){}
string speak(){return m_name + " speaks " + m_speak;}
};
class Dog: public Animal
{
private:
string m_dspeak;
public:
Dog(string name, string speak = "Woof!"): Animal(name), m_dspeak(speak){}
string speak(){ return m_name + " " + m_speak;}
};
class Cat: public Animal
{
private:
string m_cspeak;
public:
Cat(string name, string speak = "Meow!"): Animal(name), m_cspeak(speak){}
string speak(){ return m_name + " speaks " + m_cspeak;}
};
int main()
{
Cat Fred("Fred");
Dog Stuffy("Stuffy");
Animal *ptr = &Fred;
cout << ptr->speak() << endl;
Animal *ptr2 = &Stuffy;
cout << ptr2->speak() << endl;
}
答案 1 :(得分:1)
将speak()
的两个实现更改为:
string speak(){ return m_name + " speaks " + m_speak; }
目前,您的speak
方法没有返回语句,因此返回值未定义,这可能会导致奇怪的问题。
答案 2 :(得分:-3)
对不起,我误解了你的问题。我编辑了答案。
你不需要在这个功能中小丑。你会在主要的那样做。
namespace TestFastJson
{
internal class Program
{
private static void Main()
{
var sale = new Sale
{
SaleItems = new List<SaleItem>
{
new SaleItem(),
new SaleItem()
}
};
string jsonText = fastJSON.JSON.ToJSON(sale);
var newobj = fastJSON.JSON.ToObject<Sale>(jsonText);
Console.WriteLine(newobj.SaleItems.Count);
}
}
public class Sale
{
public DateTime Date { get; set; }
public List<SaleItem> SaleItems { get; set; }
public int Total { get; set; }
}
public class SaleItem
{
public string ProductId { get; set; }
public int Amount { get; set; }
public string Quality { get; set; }
}
}