??xml version="1.0" encoding="utf-8" standalone="yes"?>
比如strcpyQstrcatQ链表逆序Q排序,字符串匹配查找,单向链表上的环{等
virtualQconstQstaticQextern “C”,虚函数表Q构造、析构函数可否ؓvirtualQ纯虚函敎ͼ虚拟l承
//delete只是释放内存Q不修改指针变量的?
//你需要自己去讄 str=NULL
//delete释放了堆上面的内存,str是栈上的指针变量
//在void Test(void)函数中,我们只能手动改变str的|而无法手动释放指针的内存
//当void Test(void)函数退出时Qstr本n的内存才释放?br />/////////////////////////////////////////////////////////
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
//////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
Test();
getchar();
return 0;
}
用指针动态分配一D内存空_指针指向的是q段内存的首地址Q同L释放也只是释放这个指针指向的首地址Q也是说delete str只是释放了第一个字母h的内存空间?br />
一Q填I题
(26
?/span>
)
1 Q?/span> WIN32 q_下, sizeof(short) = __2__ Q?/span> sizeof(int) = __4__ Q?/span> sizeof(long) = __4__ ?/span> (3 ?/span> )
2 Q请l出如下E序的结?/span> (2 ?/span> )
int a = 3;
int b = a << 3;
a = __3__ Q?/span> b = __24__ ?/span>
3 Q请 l出如下E序的结?/span> (2 ?/span> )
int aaa = 0x01;
htonl(aaa) = _16777216___
?/span> //q题q行昄的是16777216Q我觉得可能是随机?/p>
4
Q请l出如下E序的结?/span>
(2
?/span>
)
#define MAX_NUM 100+200
int nTemp = MAX_NUM*10;
?/span>
Temp = __2100__
?/span>
5
Q请l出如下E序的结?/span>
(3
?/span>
)
char szTemp[1000] = "";
int nLen1 = sizeof(szTemp);
int nLen2 = strlen(szTemp);
strcpy(szTemp, "abc");
int nLen3 = sizeof(szTemp);
int nLen4 = strlen(szTemp);
int nTemp[100];
int *pTemp = nTemp;
int nLen5 = sizeof(pTemp);
char szResult[200] = "";
sprintf(szResult, "%d,%d,%d,%d,%02d.", nLen1, nLen2, nLen3, nLen4, nLen5);
?/span>
szResult = ____
?/span>
6
Q?/span>
MFC
中,大部分类是从哪个cȝ承而来Q?/span>
CCmdTarget
?/span>
CObject
?/span>
CWinApp
?/span>
CWnd
Q?
(2
?/span>
)__CObject __
7
Q内存是q程范围
or
U程范围Q?/span>
____
CPU
调度Ӟ针对q程
or
U程Q?/span>
____
函数调用堆栈Q针对进E?/span>
or
U程?/span>
____(3
?/span>
)
8
Q调用函?/span>
bbb
后,输出是什?/span>
(4
?/span>
)
void ccc(int x)
{
char szTemp[10] = "";
x = 2;
sprintf(szTemp, "%d,", x);
afxDump << szTemp;
if(x = 3)
{
int x = 4;
sprintf(szTemp, "%d,", x);
afxDump << szTemp;
}
sprintf(szTemp, "%d,", x);
afxDump << szTemp;
}
void bbb()
{
char szTemp[10] = "";
int x = 7;
ccc(x);
sprintf(szTemp, "%d,", x);
afxDump << szTemp;
}
二.攚w?/span>
(
d
15
?/span>
,
每题
5
?/span>
)
?/span>
1
Q下面代码有何错?/span>
void func1()
{
int *pa = NULL;
func2(pa);
delete pa;
}
void func2(int *pb)
{
pb = new int(5);
}
2
Q下面代码有何错?/span>
void func2(int *value)
{
*value = 2;
}
void func1()
{
int *p = 0;
func2(p);
}
3
Q?/span>
int func1(int& b)
{
return 0;
}
void func2()
{
int bbb = 3;
func1(&bbb);
func1(bbb);
}
func2
中有何错误,
func1
的参?/span>
b
的类型是什么?/span>
三.{题
(64
?/span>
)
1.
Lq?/span>
C
?/span>
C++
?/span>
VC
?/span>
MFC
在概念上的区?/span>
(4
?/span>
)
2
Q请写一个函数重载的单例?/span>
(4
?/span>
)
3.
用什么函数开启新q程、线E?/span>
(4
?/span>
)
4.SendMessage
?/span>
PostMessage
有什么区?/span>
(4
?/span>
)
5.WaitForSingleObject
有何作用Q?/span>
m_pThrd
的类型是
CWinThread*
Ӟ
WaitForSingleObject(m_pThrd->m_hThread, INFINITE);
有何作用?/span>
(4
?/span>
)
6. __stdcall
?/span>
__cdecl
?/span>
__pascal
在什么方面有所不同?/span>
(4
?/span>
)
7
Q请把下qC码加上异常处理?/span>
(6
?/span>
)
int MyWriteFile(CString strFileName, CString strText)
{
int nRet = 0;
CFile myFile;
myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);
int nLen = strText.GetLength();
myFile.Write((char*)(LPCSTR)strText, nLen);
myFile.Close();
return nRet;
}
8
Q请解释?/span>
func
”ؓ何种cdQ这U类型的作用什么,变量
ttt
的值是多少Q?/span>
(6
?/span>
)
typedef int (*func)(int, int*);
int xxx(int a, int *p)
{
return a + *p;
}
int dowork(func aaa, int bbb, int *ccc)
{
return aaa(bbb, ccc);
}
int sss = 4;
int ttt = dowork(&xxx, 3, &sss);
9
Q请问下qC码中
: int operator+(?/span>
Qv什么作用?
this
是什么?
ccc
的值最lؓ多少Q?/span>
(6
?/span>
)
class Fruit
{
public:
Fruit()
{
weight = 2;
}
Fruit(int w)
{
weight = w;
}
int operator+(Fruit f)
{
return this->weight * f.weight;
}
private:
int weight;
};
Fruit aaa;
Fruit bbb(4);
int ccc = aaa + bbb;
10.
误释下面代码采用了何种
C++
Ҏ(
C
语言不具备)Q作用是什么?
(6
?/span>
)
template<typename T>
T sum(T a, T b)
{
return (a + b);
}
11
Q请解释
aaa.h
中下面代码的功能
(5
?/span>
)
#if !defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_)
#define AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_
... ...
#endif
12
Q?/span>
CMemoryState
主要功能是什?/span>
(5
?/span>
)
13
Q请阅读下述代码Q写出程序执行的l果Q?/span>
6
分)
#include <iostream>
using namespace std;
class CBase
{
public:
virtual void print()
{
cout<< "base" << endl;
}
void DoPrint()
{
print();
}
};
class CChild1: public CBase
{
public:
virtual void print()
{
cout<< "child1" << endl;
}
};
class CChild2: public CBase
{
public:
virtual void print()
{
cout<< "child2" << endl;
}
};
void DoPrint(CBase *base)
{
base->DoPrint();
}
void main()
{
CBase* base = new CBase();
CChild1* child1 = new CChild1();
CChild2* child2 = new CChild2();
DoPrint(child1);
DoPrint(child2);
DoPrint(base);
delete base;
base = child1;
base->print();
delete child1;
delete child2;
}
]]>
1
、请实现一个完?/span>
Win32 API lstrcpyn
的函敎ͼ只实?/span>
MBCS
版?/span>
2
、请实现一?/span>
string
cȝ拯构造函数?br />
一、图形图?/span>
h要求完成一?/span>
3D
的演C,具体内容误
Test3d.zip
文gQ?/span>
二、网l?/span>
游戏服务器程序需要提供一?/span>
Telnet
服务来满_发h员对游戏服务器进行实时监控的需求,L
socket
来实C个网l服务器端模块,同时h供测试程序,需求如下:
1?span style="FONT: 7pt 'Times New Roman'">
请?/span>
Berkeley Socket
的标准函敎ͼ
2?span style="FONT: 7pt 'Times New Roman'">
服务器模块监听标?/span>
Telnet
服务端口Q?/span>
3?span style="FONT: 7pt 'Times New Roman'">
服务器模块同一旉只接收一个客L的连接;
4?span style="FONT: 7pt 'Times New Roman'">
服务器模块ؓ单线E;
5?span style="FONT: 7pt 'Times New Roman'">
服务器测试程序通过回调函数处理相应的网l事Ӟ
6?span style="FONT: 7pt 'Times New Roman'">
服务器端试E序需要提供回昄服务Q将客户端输入的字符回写入客L?/span>
{案
Q?/span>
h供可以编译的
c/c++
源文件ƈ标记出是Z哪个操作pȝQ操作系l仅限于Q?/span>
Windows/Linux/FreeBSD
?/span>
三、数据库
在游戏中需要保存好友列表,每个玩家最多可以有
1000
个好友,每个玩家的数据中包括账号Q昵Uͼq龄Q性别Q其中玩家可以通过늧来搜索到其他玩家Q请设计一个数据库来保存每个玩家信息和对应该玩家的好友列表信息Q要求:
1?span style="FONT: 7pt 'Times New Roman'">
要保证数据库在搜索指定玩家的好友列表信息时的效率Q?/span>
2?span style="FONT: 7pt 'Times New Roman'">
不浪Ҏ据库的存储空_
3?span style="FONT: 7pt 'Times New Roman'">
对于需求的改变要有很强的适应力,如好友列表的上限?/span>
1000
变ؓ
2000
Q玩家的数据中新增加一n份证受?/span>
{案
h供用于徏立表?/span>
SQL
语句和查询指定昵U玩家的所有好友信息,q标记出是在哪个数据库^C做的试?/span>
struct
{
short a1;
short a2;
short a3;
}A;
struct
{
long a1;
short a2;
}B;
int _tmain(int argc, _TCHAR* argv[])
{
char* ss1 = "0123456789";
char ss2[] = "0123456789";
char ss3[100] = "0123456789";
int ss4[100];
char q1[] = "abc";
char q2[] = "a\n";
char* q3 = "a\n";
char *str1 = (char*)malloc(100);
void *str2 = (void*)malloc(100);
cout<<sizeof(ss1)<< " ";
cout<<sizeof(ss2)<< " ";
cout<<sizeof(ss3)<< " ";
cout<<sizeof(ss4)<< " ";
cout<<sizeof(q1)<< " ";
cout<<sizeof(q2)<< " ";
cout<<sizeof(q3)<< " ";
cout<<sizeof(A)<< " ";
cout<<sizeof(B)<< " ";
cout<<sizeof(str1)<< " ";
cout<<sizeof(str2)<< " ";
getchar();
return 0;
}
l果 4 11 100 400 4 3 4 6 8 4 4
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b>6)?puts(">6"):puts("<=6");
}
l果 >6
做错了,q题
b会{换ؓ unsigned int Q那么最高位?Q所以b的数字就很大了,肯定大于6
6.#define和typede的区别,你更喜欢哪种QWhy?
{案:
1) #define是预处理指oQ在~译预处理时q行单的替换Q不作正性检查,不关含义是否正确照样带入Q只有在~译已被展开的源E序时才会发现可能的错误q报错。例如:
#define PI 3.1415926
E序中的Qarea=PI*r*r 会替换ؓ3.1415926*r*r
如果你把#define语句中的数字9 写成字母g 预处理也照样带入?
2Qtypedef是在~译时处理的。它在自q作用域内l一个已l存在的cd一个别名,但是You cannot use the typedef specifier inside a function definition?
3Qtypedef int * int_ptr;
?
#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所? Q?define在预处理 时进行简单的替换Q而typedef不是单替? Q而是采用如同定义变量的方法那h声明一U类型。也是?
//refer to (xzgyb(老达?)
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是单的宏替?
typedef int* int_ptr;
int_ptr a, b; //a, b 都ؓ指向int的指?typedef为int* 引入了一个新的助记符
q也说明了ؓ什么下面观Ҏ?
//QunKangLi(l护成本与程序员的创造力的^Ҏ正比)
typedef int * pint ;
#define PINT int *
那么Q?
const pint p ;//p不可更改Q但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更攏V?
pint是一U指针类? const pint p 是把指针给锁住? p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象?
3Q也许您已经注意?define 不是语句 不要在行末加分号Q否? 会连分号一块置换。 ?br />
7.非C++内徏型别A和BQ在哪几U情况下B能隐式{化ؓAQ?br />
昑ּ转换和隐式{换的区别Q?br />static_cast用于派生类指针转换成基cL针。发生于~译时刻?
dynamic_cast用于基cL针{换成zcL针。发生于q行时刻?
static_castq可用于Q?
- 转换不同内徏数据cdQchar->intQflot->double{)
- 转换整数cd到enum
- 转换I指针ؓM其它cd的空指针
reinterpret_cast可用于:
- 转换M相关或不相关的指?
- 转换指针为整数类?Q反q来也行吗?Q?
- 转换I指针ؓM其它cd的空指针
8.C++中的I类Q默认出哪些类的成员函敎ͼ
{案Q?/font>
class Empty
{
public:
Empty(); // ~省构造函?
Empty( const Empty& ); // 拯构造函?
~Empty(); // 析构函数
Empty& operator=( const Empty& ); // 赋D符
Empty* operator&(); // 取址q算W?
const Empty* operator&() const; // 取址q算W?const
};
10.写一个函敎ͼ完成内存之间的拷?br />
5. 用变量al出下面的定?
a) 一个整型数QAn integerQ?
b) 一个指向整型数的指针(A pointer to an integerQ?
c) 一个指向指针的的指针,它指向的指针是指向一个整型数QA pointer to a pointer to an integerQ?
d) 一个有10个整型数的数l(An array of 10 integersQ?
e) 一个有10个指针的数组Q该指针是指向一个整型数的(An array of 10 pointers to integersQ?
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integersQ?
g) 一个指向函数的指针Q该函数有一个整型参数ƈq回一个整型数QA pointer to a function that takes an integer as an argument and returns an integerQ?
h) 一个有10个指针的数组Q该指针指向一个函敎ͼ该函数有一个整型参数ƈq回一个整型数Q?An array of ten pointers to functions that take an integer argument and return an integer Q?br />
{案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer