问题描述
- 三道c++难题谁会做,三道c++难题谁会做
- 题1
class Object {
public:
Object() { init(); }
virtual void init() {}
};
class GameObject : public Object {
public:
virtual void init() { m_TypeName = ""GameObject""; }
std::string m_TypeName;
};
int main()
{
GameObject gameObject;
std::cout << ""GameObject type name is "" << gameObject.m_TypeName << std::endl;
return 0;
}
请问这段代码的运行结果为何? 产生这样结果的原因是? 如何修改能够使代码符合预期?题2
float zero = 0 three = 3 four = 4;
class Complex
{
public:
float &x &y;
Complex() : x(zero) y(zero) {}
Complex(float& z) : x(y) y(z) {}
Complex(float& _x float& _y) : x(_x) y(_y) {}
};
float square(const float& x)
{
return x * x;
}
float absValue(Complex& c)
{
return sqrt(square(c.x) + square(c.y));
}
int main()
{
Complex c(four);
printf(""absolute value is %gn"" absValue(c));
return 0;
}
请问这段代码的运行结果为何? 产生这样结果的原因是? 如何修正?题3
某树形结构节点定义如下:
class Node
{
public:
const char* m_FriendlyName;
Node* m_ParentNode;
Node* m_LeftChildNode;
Node* m_RightChildNode;
};
void printNode(Node* p_Node)
{
if (p_Node != 0)std::cout << ""Node: "" << p_Node->m_FriendlyName << std::endl;
}
请编写代码: 1 通过调用printNode函数打印树结构的所有节点; 2 按照层级顺序打印树结构的所有节点
解决方案
打开codepad.org,左边选择C++,把代码贴进去,勾选run code。结果就可以看到了。有什么错误也会告诉你。
机器能回答你的问题何必求助于人。
解决方案二:
没工夫看,第一题是基类构造函数的顺序问题。
基类的构造函数执行的时候,调用自身的init
http://blog.csdn.net/magictong/article/details/6734241
解决方案三:
第一个应该运行报错,具体报错信息不知道,可以自己试试。原因是基类在构造的时候调用了一个虚函数,子类重载了该虚函数而且此时子类没有构造完成(子类的成员m_TypeName没有构造),所以报错。做法可以将m_TypeName的初始化放到子类的构造函数里,而不是虚函数中。,
第二个也是运行时报错,原因是x没有初始化。因为类中的成员构造顺序是声明顺序,所以x的构造在y之前,但是此时y没有值,所以之后访问x会报错。修改方式是把Complex(float& z) : x(y) y(z) {}改成Complex(float& z) : x(z) y(z) {}
第三个第一问是
void printNode(Node* p_Node){ if (p_Node != 0) std::cout << ""Node: "" << p_Node->m_FriendlyName << std::endl; printNode(p_Node->m_LeftChildNode); printNode(p_Node->m_rigthChildNode);}
先序遍历。第二问没有仔细想,坐等大神。
解决方案四:
直接用编译器编译运行一下,就看到结果了