一、选择题

1、现有代码char a = -129;printf(“%d”,a); 输出为多少 (B)× A

A. 127
B. -129
C. 0
D. 1

char 范围 -128~127,-129 溢出,-128-1 变成 127

2、现有指针变量int*p;指向了一块内存,下面哪个函数声明的函数,可以修改p的指向 (B)

A. void fun(int* p);
B. void fun(int** p);
C. void fun(const int* p);
D. void fun(const int** p);

二级指针解引用成指针修改地址

3、以下代码的输出为: (B)

int x = 2;
switch (x)
{
case 1: x++;
case 2: x++;
case 3: x++; break;
default: x += 3;
}
printf("%d", x);
A. 3
B. 4
C. 5
D. 6

4、现有宏定义 define SQUARE(x) x*x,调用SQUARE(2+3)的结果为多少 (D)× C

A. 6
B. 9
C. 11
D. 25

宏在预处理阶段会进行简单的文本替换,不会进行算术运算或添加括号
2+3*2+3=11

5、C语言中,有代码char *str = “1234”;str[0]=’A’;该代码正常编译执行,会出现什么情况(D)×B

A. 正常执行
B. 运行时错误
C. 编译警告
D. 编译错误

语法上合法不会编译错误,字符串存储在只读内存区域,指针 str 指向可以改,但 str[0]=‘A’试图修改只读内存区域的内容,题中“正常编译执行”,那就是在运行时错误

6、以下代码执行会输出什么 (C)

#include <stdio.h>
int* func() 
{ 
int x = 10; 
return &x; 
}
 
int main() 
{
  int *p = func(); 
  getchar(); /*按一次回车*/
  printf("%d", *p); 
}
A. 10
B. 0
C. 未知的值
D. 编译报错/运行报错

func 函数结束时 x 销毁,返回的指针指向了一个无效内存

7、下面正确定义数组指针指向数组的是,数组为int arr[][3]={1,2,3,4,5,6,7};(A)×C

A. int *p[3];
B. int (p)[3];
C. int (*p)[3];
D. int p[]; 

指针数组和数组指针:
[]的优先级高于*,int *p[3]相当于 int *(p[3]), p就是一个有 3 个元素的数组,每个元素的类型是整形指针;int (*p)[3]中 p就是指向一个有三个 int 元素的指针

8、现有1.txt文件,首先打开这个文件读取所有内容然后关闭文件,再次打开这个文件再末尾添加数据。那么打开方式应该是 (D)

A. 先w后r
B. 先r后w
C. 先a后r
D. 先r后a

9、使用函数递归计算斐波那契数列第9999位的值,会出现 (D)×B

A. 正确输出
B. 栈溢出
C. 死循环
D. 程序奔溃

递归深度过深,超出栈容量

10、有如下代码,输出为 (B)×C

 int x = 1, y = 0, z = 1;
 int b = (y++&&--x || z--);
 printf("%d %d %d %d", x, y, z, b);
A. 0 1 0 1
B. 0 1 0 0
C. 1 1 0 1
D. 1 1 0 0

y++先参与运算再自加,以 0 参与然后自加成 1,&&这一段短路成 0, ,—x 不运行 x=1,z—以 1 参与然后自减为 0,0 || 1 为 1, b=1

11、有如下代码执行,会出现那种情况(C)×D

void fun(int *p)
{
 p = (int*)malloc(4);
}
 
int main()
{
 int *p = nullptr;
 fun(p);
 printf("%d\n", *p);
 return 0;
}
A. 输出0

B. 输出10

C. 输出随机值

D. 程序出现异常错误

fun (p) 传了个 nullptr 进去,然后给形参分配了内存,但实参 p 还是 nullptr,试图解引用 nullptr 报错

12、有如下代码,输出为(?)×C

/*内存中为小端存储*/
 int value = 0x41424344;
 printf("%c\n", *((char*)&value+2));
A. D
B. C
C. B
D. A

value 在内存中占了 4 字节,高字节 0x41 0x42 0x43 0x44 低字节, 小端模式是低字节对应低地址,高字节对应高地址。&value 取首地址 0x44 强转成 char*,即每次按 1 字节操作,+2 变成 0x42,ASCII 码表对应’B’

13、有如下代码,在空白处应填入(?)×A

bool compare(int a, int b)
{
 return a > b;
}
 
void fun(int a,int b,①)
{
 if (c(a, b))
  printf("a大于b\n");
 else
  printf("a小于b\n");
}
 
int main()
{
 fun(10, 3, ②);
 return 0;
}
A. ①bool(*c)(int,int)  ②compare
B. ①bool(*c)(int x,int y)  ②compare(int,int)
C. ①bool*c(int,int)  ②compare
D. ①bool*c(int x,int y)  ②&compare

函数指针的声明格式:返回类型 (*指针变量名)(参数类型列表) 参数名可选。函数名即地址

14、有如下代码输出为(B)×A

 char str[10] = { 'A','B',0,'C','D' };
 printf("\"%s\n\"", str);
A. “AB”
B. “AB CD”
C. “CD”
D. “AB CD烫烫烫”

字符串输出到空字符终止

15、有如下代码输出为(A)

 char str1[10] = { 'A','B',0,'C','D' };
 char str2[10] = "ABCDE";
 strcpy(str2, str1);
 printf("\"%s\n\"", str2);
A. “AB”
B. “ABCDEAB”
C. “ABCDEAB CD”
D. “AB CD”

16、现有元素1,2,3,4,按顺序入栈,可随时进行出栈操作,那么出栈不会出现的是(C)

A. 1234
B. 2134
C. 3124
D. 4321

17、现在希望在函数fun中对实参int*p;修改p的指向,那么形参应该定义为 (C)

A. int*p
B. int p
C. int**p
D. int&p

18、如果一个对象的析构函数执行了那么 (A)×?

A. 对象中的数据成员都被释放了,不能再使用了
B. 对象不能再使用了
C. 对象一定死亡了
D. 对象不一定死亡

19、有如下代码,执行会出现什么情况 (C)

class Person
{
public:
 Person()
 {
  Person p;
 }
};
int main()
{
 Person p;
 return 0;
}
A. 程序正常执行
B. 程序出现异常
C. 程序卡死
D. 程序出现语法错误

20、在类Person中具有静态数据成员,那么静态数据成员的初始化必须写在 (C)

A. 初始化列表中
B. 无参构造中
C. 类外进行初始化
D. 带参构造中

21、现有类A需要使用类B的功能,那么我们应该 (C)×B

A. 类A继承类B使用
B. 类A包含类B的对象使用
C. 把类A声明为类B的友元
D. 把类B声明为类A的友元

在类 A 里声明一个类 B 对象来点出类 B 的函数。用友元会破坏封装,增加耦合

22、有如下代码,Person是一个类类型,一共调用了多少次拷贝构造 (A)×B

Person& fun(Person p)
{
 return p;
}
int main()
{
 Person p1;
 Person p2 = fun(p1);
 return 0;
}
A. 1
B. 2
C. 3
D. 4

参数传递:1次拷贝构造(p1 → p
初始化 p2:1次拷贝构造(p → p2

23、已定义了一个类A并有语句A*pa=new A(5);那么以下说法正确的是: (A)

A. 该语句会创建A类的一个对象,并将此对象的地址赋给指针pa
B. 该语句会创建A类的5个对象,且它们的地址是连续的
C. 当指针变量pa超出其作用域时,pa和为对象分配的空间都将被自动释放
D. 类A中一定有一个显式定义的构造函数和一个显式定义的虚析构函数

如果要创建对象数组,应使用 new A[5]

24、建立一个有成员对象的派生类对象时,各构造函数体的执行顺序为 (C)

A. 派生类->成员对象类->基类
B. 成员对象类->基类->派生类
C. 基类->成员对象类->派生类
D. 基类->派生类->成员对象类

25、现在一个类中定义的有一个int a;成员和两个虚函数成员。无其他成员。那么类的大小为(D)

A. 4
B. 8
C. 12
D. 16

虚函数表指针:当类中有虚函数时,编译器会在对象中添加一个指向虚函数表的指针(vptr)。在32位系统上,指针大小为4字节;在64位系统上,指针大小为8字节。
int成员:int a 占用4字节
内存对齐:通常按照最大成员的大小进行对齐

26、下面关于类中静态数据成员的说法正确的是 (C)

A. 静态数据成员必须在构造函数中进行初始化
B. 静态数据成员无论任何访问属性都可以类外通过类名和作用域运算符进行访问
C. 静态数据成员可以在一个普通函数中进行使用
D. 静态数据成员在类中声明即可,不需要做其他操作就可以使用了

27、下面哪个模板函数的声明是错误的 (BC)?

A. template<typename T1,typename T2>
	void fun(T1 x,T2 y);
B. template<typename T1=int,typename T2>
	void fun(T1 x,T2 y);
C. template<typename T1,T2>
	 void fun(T1 x,T2 y);
D. template<typename T1,typename T2=int>
	 void fun(T1 x,T2 y);

每个模板参数必须用 typename 或 class 关键字声明(非类型参数除外)
模板参数可以有默认值,但有默认值的参数必须放在参数列表的后面

28、下面关于多态说法正确的是 (?)

A. 任意一个函数在多态中,都可以通过基类指针指向子类对象调用
B. 要实现多态,子类中需要把函数定义为虚函数成员
C. 如果一个类中有纯虚函数,那么该类可以继续定义对象使用
D. 实现多态只需要类中有虚函数成员就可以了
  1. 基类中将函数声明为虚函数。
  2. 子类重写该虚函数。
  3. 通过基类的指针或引用调用该函数

29、下面关于继承说明正确的是 (D)×C

A. 父类对象可以直接给子类对象赋值
B. 子类会继承父类的所有成员,私有成员除外
C. 如果子类和父类具有同名成员,那么直接通过子类对象调用,调用的是子类的同名成员
D. 子类对象在定义时,可以不用调用父类构造函数

当子类和父类有同名成员时,子类成员会隐藏父类同名成员
构造子类对象时,必须先构造父类部分

30、一个类中如果有纯虚函数,下面说法错误的是 (D)×B

A. 该类不可以用来定义对象
B. 只能作为基类指针指向子类对象使用
C. 这样的类称之为抽象类
D. 纯虚函数在子类中可以不用重写

31、windows消息机制指的是 ()

A. 产生消息,处理消息,传递消息的过程
B. 产生消息,传递消息,处理消息的过程
C. 维护消息队列,获取消息,处理消息的过程
D. 获取消息,处理消息的过程

32、有字符串wchar_t str[]=L”张三18岁”;下面说法正确的是 ()

A. 数组大小str为10,字符串有效长度为10
B. 数组大小str为12,字符串有效长度为8
C. 数组大小str为10,字符串有效长度为5
D. 数组大小str为12,字符串有效长度为5

33、在win32消息处理函数中处理了系统命令消息,代码如下,那么 ()

/*省略其他代码*/
 
case WM_SYSCOMMAND: //系统命令消息
{
 switch (wParam)
 {
 case SC_CLOSE://关闭消息
 {
  return 0;
 }
  break;
 }
}
break;
 
/*省略其他代码*/
A. 关闭窗口将不能关闭,其他系统命令消息正常使用
B. 所有的系统命令消息正常使用,也能正常关闭窗口
C. 程序卡死
D. 程序未卡死,但是不能操作窗口比如移动窗口,改变窗口大小等

34、下面关于对话框描述正确的是 ()

A. 所有的对话框都是模态窗口
B. 所有的对话框都是非模态窗口
C. 主窗口弹出模态窗口,那么不处理完这个模态窗口无法对主窗口进行操作
D. 主窗口弹出非模态窗口,那么不处理完这个非模态窗口无法对主窗口进行操作

35、下面关于控件变量描述正确的是 ()

A. 控件变量可以直接操作与之关联的控件
B. 一个控件变量可以与任意一个控件进行关联
C. 一个控件必须要有控件变量才能进行显示,使用
D. 控件变量的创建,必须先在窗口资源中拖入控件,然后才创建对应的控件变量

36、现在有表《操作员基本信息》具有用户ID,用户姓名,用户密码,所属部门,联系电话,备注,表《功能角色定义》具有功能角色ID,角色名称,备注。那么这两个表关联的主键为 ()

A. 备注和备注
B. 用户ID和功能角色ID
C. 用户ID和角色名称
D. 用户姓名和角色名称

37、在表student中查找姓张的人,语句为: ()

A. select * from student where name = ‘张_’
B. select * from student name like ‘张%’
C. select * from student where name like ‘张_’
D. select * from student where name like ‘张_%’

38、两个不同实体之间的联系有哪几种类型 ()

A. 一对一
B. 一对多
C. 多对多
D. 以上都是

39、以下关于数据库规范化中范式的概念错误的是 ()

A. 二范式就是在第一范式的基础上属性完全依赖于主键,其相当于需要满足两个条件,一是关系模式中要有主键,二是非主属性要完全依赖于主键
B. 数据库一般规范到第三范式或者BC范式即可,不必追求更高的范式。
C. 第五范式又称为完美范式,它是最完美的范式,没有任何缺点。
D. BCNF也被称为修正的第三范式,其在3NF的基础上消除了主属性之间相互依赖的情况

40、以下创建表格的SQL语句正确的是 ()

A. create table 学生表(学号 int, 学生姓名 char(20));
B. create table 123456(id int, name varchar);
E. create table students(s_id int, s_name varchar(20),); 
C. create table students(int s_id, char s_name);

41、假设已将关系模式students(s_id int, s_name varchar(20), s_sex varchar(4), s_age int)创建成数据表,则以下能够正确的向表格students中插入数据的SQL语句是 ()

A. insert into students values(1,”张三”),(2,”李四”),(3,”王五”);
B. insert into students(s_id,s_name) values(1,”张三”),(2,”李四”),(3,”王五”);
F. insert into student(s_id,s_name) value(1,”张三”),(2,”李四”),(3,”王五”);
C. insert into students(s_id,s_name) values(1,”张三”),(2,”李四”),(3,”王五”),;

42、以下能不能够正确添加唯一值约束的SQL语句格式是 ()

A. alter table <表名> add constraint <约束名> unique(<属性1>[,属性2]);
B. alter table <表名> modify column <属性名> <数据类型> unique;
C. alter table <表名> add unique(属性名);
D. alter table <表名> modify column unique(属性名);

43、以下关于默认值约束说法错误的是 ()

A. 给带有默认值约束的属性添加数据时,如果没有给定属性的取值,会自动为属性添加一个默认值
B. 可以在创建表时为属性添加自增列约束,只需在属性的数据类型后加上约束名即可
C. 可以用修改表结构的方法为属性添加自增列约束,其添加的方法与自增列和非空约束大同小异
D. 某个属性在使用默认值约束的情况下,其属性值不可能为空

44、以下关于多表查询的描述中错误的是 ()

A. 交叉连接会先产生笛卡尔积,再根据条件表达式筛选出对应的记录,其查询效率低并且查询性能差
B. 内连接是先根据条件表达式筛选出对应的记录,再将各条记录连接起来,避免产生笛卡尔积,从而提高查询效率
C. 左连接是以左表为基准,显示左表查询字段的所有记录,右表只显示与左表匹配的记录,没有匹配的用null代替,而右连接与其相反,所以左连接不可以转换为右连接
D. MySQL不支持全外连接,但是可以用左外连接或者右外连接的合并来得到全外连接查询的效果

45、关于索引的创建以下选项错误的是 ()

A. 只能对字符串或者文本类型的属性列建立全文索引
B. 对字段创建唯一或主键索引时,该字段会自动建立唯一或主键约束
C. 以修改表的方式创建索引的基本格式为:alter table 表名 add index 索引名(字段1[,字段2,…,字段n])
D. 创建普通索引的基本格式为:create index 索引名 on 表名<字段1[,字段2,…,字段n]>

46、以下能够实现对数据n向下取整(舍去小数)的SQL语句是 ()

A. round(n);
B. round(n+0.5);
C. round(n-0.5);
D. round(n,0.5);

47、以下能够实现判断数据n和m大小关系的SQL语句是 ()

A. if n>m then select “n大于m”; 
elseif n<m then select “n小于m” 
else select “n等于m”; 

B. if n>m then select “n大于m”; 
elseif n<m then select “n小于m” 
else select “n等于m”; 
end if;

C. if n>m then select 'n大于m'; 
elseif n=m then select 'n等于m'; 
else then select 'n小于m'; 
end if;

D. if n>m then select 'n大于m'; 
else if n=m then select 'n等于m'; 
else select 'n小于m'; 
end if; 

48、以下关于流程控制语句说法错误的是 ()

A. leave语句是跳出并结束整个循环,相当于C语言中的break
B. 流程控制中可以使用select语句来查询显示出运行结
C. iterate跳出本次循环,进入下一次循环,相当于C语言中的continue
D. 存储过程、函数和流程控制中只能使用局部变量,不能使用用户变量

49、现在有vector v1;使用push_back插入了1,3,5,6,9那么执行以下代码删除的元素是 ()

vector<int>::iterator itBegin=v1.begin()+1;
vector<int>::iterator itEnd=v1.begin()+2;
v1.erase(itBegin,itEnd);
A. 1,3
B. 3,5
C. 5,6
D. 6,9

50、定义vector v1(1);这个容器v1里面的值和容器大小是 ()

A. 1,1
B. 1,0
C. 0,1
D. 未知,1

51、高度为5的满二叉树,这颗树的节点数量为 ()

A. 29
B. 30
C. 31
D. 32

52、某二叉树的前序遍历节点访问顺序是abdgcefh,中序遍历的访问顺序是dgbaechf,则其后序遍历的节点访问顺序是 ()

A. bdgcefha  
B. gdbecfha 
C. bdgaechf
D. Gdbehfca

53、用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序的时,元素的变化情况如下:则所采用的排序方法是 ()

(1)25,84,21,47,15,27,68,35,20
(2)20,15,21,25,47,27,68,35,84
(3)15,20,21,25,35,27,47,68,84
(4)15,20,21,25,27,35,47,68,84
A. 选择排序
B. 希尔排序
C. 归并排序
D. 快速排序  

54、若线性表最常用的操作是存取第i个元素及其前驱的值,则采用存储方式节省时间: ()

A. 单链表
B. 双链表
C. 单循环链表
D. 顺序表

55、一个有n个顶点的无向图最多有多少条边 ()

A. n        
B. n(n-1)      
C. n(n-1)/2       
D. 2n

56、所有信号与槽都正确定,下面关联信号与槽会失败的是,义 ()

A. connect(this,SIGNAL(signal1()),this,SLOT(slot1()));
B. connect(this,SINGAL(signal2(int,char)),this,SLOT(slot2(int)));
C. connect(this,SIGNAL(signal3(int)),this,SLOT(slot3(char)));
D. connect(this,SIGNAL(signal4(int)),this,SLOT(slot4()));

57、关于布局下面说法错误的是 ()

A. 会自动排列控件位置
B. 会自动调整控件大小
C. 在布局中能通过成员setGeometry随意调整控件大小
D. 窗口大小改变控件也可以跟着以前改变位置和大小

58、使用窗口对象调用成员设置样式表,background-color: rgb(255,0,0);以下说法错误的是 ()

A. 在这个窗口上的所有控件的背景色默认都为红色
B. 如果窗口上的控件有设置背景色那么用自己设置的,不用窗口对象设置的
C. 不管窗口上的控件有没有自己设置背景色,一定会使用窗口对象设置的
D. 可以把rgb(255,0,0)部分改为#ff0000

59、在Qt中,QPainter类的drawImage()方法可以绘制什么类型的对象 ()

A. QImage
B. QPixmap
C. QIcon
D. 所有的上述类型

60、在Qt中,QListWidget的addItem()方法是用来做什么的? ()

A. 向列表中添加一个新的QListWidgetItem对象
B. 向列表中添加一个新的QListViewItem对象
C. 向列表中添加一个新的QWidget控件
D. 向列表中添加一个新的QTreeWidgetItem对象

二、问答题

1、代码中5/2结果为多少

结果为:1

2、int a[] = {5, 15, 25, 35}; int *p = a + 3; printf(“%d”, a[ *p / 10 - 1]); printf输出为多少

输出为:25

3、char *strs[] = {“C”, “Java”, “Python”}; printf(“%c”, ______); 输出”Java”的首字符,J,在空白处填入

strs[1][0]

4、int a = 5, b = 3, c = 2; int r = a * b + c / a - b % c; r的值为?

14

5、union Data { int a; double b; char c[10]; }; 该联合体的大小为?

24 字节 × 10 字节

联合体的大小取决于其最大成员的大小,因为联合体所有成员共享同一块内存空间,其大小需要能够容纳最大的那个成员

6、int a[3] [4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; int *p = &a[ 0 ] [ 0 ]; printf(“%d”, ______); 输出a [ 1 ] [ 2 ]的值 ,应该填入

*(p+6)

7、FILE *fp = fopen(“data.txt”, “r”); char buffer[100]; while (______) { fgets(buffer, 100, fp); },while添加中填入什么才能正确的读完整个文件

fgets(buffer, 100, fp)!= NULL

8、int arr[] = {10, 20, 30, 40, 50}; int *p = arr + 3; printf(“%d”, ______); 输出:20,因该填入

*(p-2)

9、现有一个类A中有静态成员static int x;现要进行分文件编写,那么静态成员x的初始化应该写在哪里,怎么写?

类的实现文件 int 类名:: x = 0;

10、父类中的数据成员如果想要让子类能直接访问,但是在类外不能被对象直接访问,那么应该定义为什么访问属性?

protected

11、win32消息机制指的是?

12、现在需要向某一个窗口投递一个黏贴消息,窗口的句柄为h1,那么投递消息的代码怎么写

13、win32中,需要得到指定窗口的上下文句柄怎么得到,窗口句柄为h1

14、win32中如何创建一个纯色画刷

15、win32中如何创建一个空菜单

16、如果相当项目有加载动态库,那么需要把动态库文件复制到哪里才能让程序正常执行?

17、现有函数声明int * fun(int, char* *, int *),写出函数指针指向这个函数

18、win32中如何处理按下 ‘%’ 字符消息

19、mfc中如何给一个静态文本绑定控件变量

20、mfc中如何修改一个控件的字体,控件对象为button

21、能不能通过win32GDI函数在主屏幕,或者是某一个窗口上进行绘制

22、mfc中如果要给一个已有的控件进行添加新的功能,并且使用这个新的类创建控件,那么要怎么做?

23、在一个函数中有定义static a=10;a++;如果说该函数调用了10次,那么在第10次调用执行完a++之后,a的值为多少

24、二分查找可以无条件的使用在任意一个数组或容器中。是否正确?

25、数据结构中在进行访问的时候,线性结构和非线性结构的成员访问方式是没有区别的,是否正确?

26、单链表中,如何通过指向头节点的指针找到尾节,头指针为head,写出相关代码

27、频繁对stl中的vector调用push_back()会有什么影响,为什么

28、进程和线程有什么区别

29、指针和引用的区别

指针是储存地址的变量,引用是变量的别名

30、函数中需要返回一个二维数组,有哪几种方法,请分别列出

返回指针 结构体包装

31、在tcp中为什么握手是三次,挥手却是四次

32、在C++中实现的一个类,现在我需要记录该类创建的对象有多少个是存活的,该类会在同个项目中的不同文件(不会有线程操作)都定义对象,也会死亡,使用什么方式可以让我轻松的知道该类定义的对象有多少个是存活的?

使用静态变量来计数

33、在C语言中如何取得一个int类型变量x的低两字节上面的值?

使用指针和类型转换 short

34、在MySQL中,如何避免重复的记录插入?

35、在MySQL中,什么是外键?

36、MySQL中的“GROUP BY”语句有什么作用?

37、MySQL中什么是事务?事务的四个特性是什么?

38、MySQL的JOIN类型有哪些?

39、什么是MySQL的存储过程?

40、什么是索引?为什么要使用索引?

41、Qt中如何实现一个自定义的控件?给出较为详细的说明或代码示例

42、Qt中如何在多个线程间共享数据?

43、Qt中的QSqlDatabase如何与数据库进行交互?

44、Qt的事件过滤器是什么?如何使用它?

45、Qt的QProcess类如何用于启动外部进程?

46、Qt中如何使用QFont设置字体样式?

47、Qt中的QDateTime类有什么作用?

48、C++中的深拷贝浅拷贝有什么区别?它们的实现机制是怎样的?

 浅拷贝拷贝值,指针成员指向同一块内存;深拷贝拷贝值,为指针成员申请新内存并拷贝内容

49、内存泄漏是什么,如何避免?

 内存泄漏指的是程序在运行时动态申请了一块内存,但在使用完毕后,没有将其释放归还给系统,导致这块内存无法再被程序本身或后续申请所使用。内存申请和释放对应

50、虚函数是如何实现的?什么是虚函数表?

 虚函数表是一个存储类虚函数地址的函数指针数组

三、编程题

1、使用win32实现鼠标左键点击情况下,拖动鼠标画线

2、使用win32实现一个带背景图片的位图动画效果

3、使用mfc实现一个简易记事本程序,要求有菜单,通过菜单及快捷键可以保存,新建,打开操作

4、使用mfc或QT实现仿qq的简易程序,要求有登录,有主面板,有聊天面板,能实现客户端与客户端之间的聊天消息发送

5、使用mfc或QT实现链接mysql数据库,把数据库的的中指定的表读出显示,并且提供对数据增删改查的操作

6、使用QT实现截取主屏幕图像功能,鼠标点击窗口移动画出一个矩形,表示截图区域,矩形区域内高亮显示,未选中的地方不高亮显示,鼠标右键点击在截图区域内可以点击移动,鼠标左键点击截取区域内可以移动画线。