开发者社区 问答 正文

三道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, 按照层级顺序打印树结构的所有节点

展开
收起
a123456678 2016-03-05 13:50:01 1993 分享 版权
1 条回答
写回答
取消 提交回答
  • 第一个应该运行报错,具体报错信息不知道,可以自己试试。原因是基类在构造的时候调用了一个虚函数,子类重载了该虚函数而且此时子类没有构造完成(子类的成员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);
    

    }

    2019-07-17 18:53:20
    赞同 展开评论
问答分类:
C++
问答地址: