GStarCAD C++笔试&机试&面试总结

引言

GStarCAD 笔试和机试总结。笔试题主要考核 C++、代码阅读理解、基本几何运算、英文阅读能力,机试题主要考察 VC++、MFC 的实际编程操作能力。

笔试部分

笔试题主要考核 C++、代码阅读理解、基本几何运算、英文阅读能力。

问题1

题目

下列代码有问题、或有可改进之处吗?如有,请直接修改,并写明原因.

class CBase
{
public:
CBase(){m_nVal = 100;}
~CBase(){}

int Get() {return m_nVal;}
int GetDouble() const {m_nVal *= 3; return m_nVal;}
private:
int m_nVal;
};

int main(int argc, char* argv[])
{
CBase base;
std::cout << “val = ”<< base.GetDouble() << std::endl;
return 0;
}
答案

答:int GetDouble() const {m_nVal *= 3; return m_nVal;} 若需要对成员变量进行赋值需删除 const

问题2

题目

请写出 main 函数的输出结果,并写明理由.

class CBase
{
public:
virtual voidSend(){std::cout << "\nSend :"<< m_nVal << std::endl;}
void Output(){Send();}
public:
int m_nVal;
};

class CUser : public CBase
{
public:
CUser(){m_nVal = 101;}
virtual voidSend(){m_nVal++;std::cout << “\nSend :”<<m_nVal<< std::endl;}
void Output(){CBase::Send();}
};

int main(int argc, char* argv[])
{
CUser user;
CBase &base=user;
base.Send();//输出:
CBase *pBase=&base;
pBase->Output();//输出:
user.Output();//输出:
}
答案
Send:102
Send:103
Send:103

问题3

题目

阅读理解类声明代码,并使用之实现功能。

class AcGePoint2d
{
public:
AcGePoint2d();
AcGePoint2d(double x, double y);
AcGePoint2d& set(double x, double y);

double x, y;
};

class AcGeLinearEnt2d
{
public:
boolintersectWith(const AcGeLinearEnt2d& line, AcGePoint2d& intPnt,const AcGeTol& tol = AcGeContext::gTol) const;//求直线交点函数

protected:
AcGeLinearEnt2d ();
AcGeLinearEnt2d (const AcGeLinearEnt2d&);
};

class AcGeLineSeg2d: public AcGeLinearEnt2d
{
public:AcGeLineSeg2d ();
AcGeLineSeg2d (const AcGeLineSeg2d & line);
AcGeLineSeg2d (const AcGePoint2d& pnt1, const AcGePoint2d& pnt2);
AcGeLineSeg2d & set (const AcGePoint2d& pnt1, const AcGePoint2d& pnt2);
};

int main(int argc, char* argv[])
{
//请使用上述类和类成员函数,在本函数中实现两直线段求交点,并输出。
//这两个直线段分别是从点(0,0) 到(500,500); 从点(600,0) 到(200,900)。

return 0;
}
答案
class AcGePoint2d
{
public:
AcGePoint2d();
AcGePoint2d(double x, double y);
AcGePoint2d& set(double x, double y);

double x, y;
};

class AcGeLinearEnt2d
{
public:
boolintersectWith(const AcGeLinearEnt2d& line, AcGePoint2d& intPnt,const AcGeTol& tol = AcGeContext::gTol) const;//求直线交点函数

protected:
AcGeLinearEnt2d ();
AcGeLinearEnt2d (const AcGeLinearEnt2d&);
};

class AcGeLineSeg2d: public AcGeLinearEnt2d
{
public:AcGeLineSeg2d ();
AcGeLineSeg2d (const AcGeLineSeg2d & line);
AcGeLineSeg2d (const AcGePoint2d& pnt1, const AcGePoint2d& pnt2);
AcGeLineSeg2d & set (const AcGePoint2d& pnt1, const AcGePoint2d& pnt2);
};

int main(int argc, char* argv[])
{
//请使用上述类和类成员函数,在本函数中实现两直线段求交点,并输出。
//这两个直线段分别是从点(0,0) 到(500,500); 从点(600,0) 到(200,900)。

+ AcGeLineSeg2dline1(AcGePoint2d(0,0),AcGePoint2d(500,500));
+ AcGeLineSeg2dline2(AcGePoint2d(600,0),AcGePoint2d(200,900));
+ AcGePoint2d pt;Line1.intersectWith(line2,pt);
+ Printf(“x:%.2f,y:%.2f”,pt.x,pt.y);

return 0;
}

问题4

基本几何运算。

  1. 已知两点 pt1,pt2,如何计算从起点 pt1 到终点 pt2 的向量 v
V = pt2 - pt1
  1. 已知向量 v1{1.0,0.0,0.0},v2{0.0,1.0,0.0}v3 = v1 - v2 ,则v3 =?
{1.0,-1.0,0.0}
  1. 已知向量v1{1.0,0.0,0.0},v2{0.0,1.0,0.0},v3=v1×v2 ,则v3=?
{0.0,0.0,1.0}
  1. 两向量的点积 v1·v2 等于 0 ,意味着两向量是什么关系?
垂直

问题5

翻译英文资料。

An ObjectARXapplication is a dynamic link library (DLL) that shares the address space of AutoCAD and makes direct function calls to AutoCAD. You can add new classes to the ObjectARXprogram environment and export them for use by other programs.

一个 ObjectARX 应用是一个的动态链接库(DLL),它共享 AutoCAD 地址空间,并直接调用函数操作 AutoCAD。你可以在 ObjectARX 程序环境中新增新的类,并将其导出给其他程序使用。

CDialog::DoModal() Call this member function to invoke the modal dialog box and return the dialog-box result when done. This member function handles all interaction with the user while the dialog box is active.

CDialog::DoModal(),使用这一成员函数可调出模态对话框,并且当其使用完成后可返回对话框的结果。当对话框激活时,这一成员函数处理所有与用户的交互。

AutoCADstores the values for its operating environment in system variables. Each system variable has an associated type: integer, real, point, or text string. You can examine any system variable and change any writable system variable directly on the command line by entering the system variable name. Many system variables are also accessible through dialog box options.

AutoCAD 保存与操作环境相关的值于系统变量中。每个系统变量有一个相关类型:整形,实型,点或字符串。你可以检测任何系统变量,并通过在命令行输入系统变量名称直接改变系统变量。许多系统变量也可以通过对话框选项设置。

机试部分

机试题主要考察 VC++、MFC 的实际编程操作能力。

控件窗口操作

  • 新建基于对话框的 MFC 工程。
  • 定义 CEdit 的派生类 CMyEdit。在 CMyEdit 类中定义成员函数 void SetIndex(int index),调用本函数后,编辑框内显示 index 数值。
  • 对话框初始创建4个大小不一的控件,分别是:CMyEditCButtonCComboBoxCEdit,分别对齐对话框4个角。
  • 在对话框类内定义一个指针数组成员变量:CArray<CWnd*> m_arrCtrl,并在对话框初始化时将上述4控件的对象指针按逆时针顺序保存到 m_arrCtrl 数组(第1个为左上角控件)。
  • 对话框窗口支持调整大小,对话框窗口大小改变后,4个控件大小不变,但位置自动跟随调整(总是对齐4个角)。
  • 每隔1秒,沿逆时针方向自动旋转切换上述4个控件位置(控件大小不变,只是位置改变,左上角控件跑到左下角,左下角跑到右下角,以此类推),m_arrCtrl 中控件指针也同步切换位置(第1个始终是左上角控件)。每次切换控件位置后,需从指针数组中找到其中唯一的 CMyEdit 控件,并调用它的 SetIndex(index)成员函数,indexCMyEdit 对象在 m_arrCtrl 数组中的新索引(0-3)。
  • 注:对话框内可以定义其它成员变量,但除对话框的构造函数、DoDataExchangeOnInitDialog 函数外,对话框其它函数中只能使用 m_arrCtrl 成员变量,不能使用其它成员变量(也不能使用全局变量和静态变量)。

排序操作

  • 新建基于对话框的 MFC 工程。
  • 在对话框上绘制一个编辑框和一个排序按钮。
  • 编辑框内可输入一系列的数,用空格分开。单击排序按钮,则对这些数由小到大排序,并重新显示在编辑框中。
  • 注:需自写排序算法。

目录浏览

  • 新建基于对话框的 MFC 工程。
  • 对话框左侧显示一个树控件,显示一个两层目录,一级目录为学校,二级为班级。对话框右侧显示一个 LISTBOX
  • 当在左侧选中不同的学校或班级,右侧 LISTBOX 刷新显示为本学校或本班级的所有学生姓名。

面试部分

  • 简单做一个自我介绍
  • 什么时候开始学习 C++ 和开始使用 VC++
  • MFC 方面实际使用过哪些类
  • 描述链表和数组的区别、优缺点,用过链表没,是否用过和了解 STL::map
  • 英语是否过了4级,阅读过MSDN的英文材料有没有问题
  • 目前还掌握了什么开发技能,是否自学的
  • 是否接触过 CAD 软件
  • 简单描述一个最能体现自身技术能力的典型项目或程序的实现
  • 感兴趣、爱好、热爱,对于编程,你属于哪一种?为什么?
  • 是否有哪方面能力特别优秀,在这方面特自信,自认为超过自己周围的人?
  • 评价一下自己有哪些缺点
  • 有什么兴趣爱好
  • 后续有什么职业规划
  • 转正薪资要求?试用期 3 个月是 80%
  • 对于我们公司和这份工作有什么需要了解的