一份CPP的面试题,这是要招聘大师吗?
C++程序员试题
(以下程序代码假设都在32位机器上运行)
写出结果
1. int i=3, j=5, k;
k = (++i) + (i++) + (j++);
i= j= k=
2. 计算sizeof 的值.
char str[] = “flower”
char *p = str ;
int n = 10;
sizeof (str ) = (1)
sizeof ( p ) = (2)
sizeof ( n ) = (3)
void Foo ( char str[100])
{
sizeof( str ) = (4)
}
void *p = malloc( 100 );
sizeof ( p ) = (5)
3. char c2[10]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
int *p1 = (int *)c2;
char *p2 = (char *)(p1+2);
*p2 = ;
4. 请看下面的代码是否有问题,如果有问题,请准确简要的说明。
class A
{
public:
A(){ init(); }
virtual ~A(){}
virtual void init();
virtual void method();
};
class B : public A
{
public:
B(): A(){}
~B(){ ~A(); }
void init(){}
void method();
};
5、下面的代码输出什么?
#include "stdio.h"
class Base
{
public:
Base(){ printf("Base Construct\n");}
~Base(){ printf("Base Destruct\n");}
void func1(void) { printf("Base func1\n"); }
virtual void func2(void) { printf("Base func2\n"); }
};
class Second :public Base
{
public:
Second(){printf("Second Construct\n");}
~Second(){printf("Second Destruct\n");}
void func1(void) { printf("Second func1\n"); }
virtual void func2(void) { printf("Second func2\n"); }
};
void main(int argc,char *argv)
{
Base ba;
Second se;
Base *pba = &se;
Second *pse = &se;
pba->func1();
pba->func2();
pse->func1();
pse->func2();
}
6. 下面代码是否有问题,如果有问题,该如何修改?
#include <vector>
void main(int argc,char *argv)
{
std::vector<int> Data;
for(int i=0; i<10; ++i)
Data.push_back(i);
std::vector<int>::iterator it;
for(it=Data.begin(); it!=Data.end(); ++it)
Data.erase(it);
}
7.下列哪些初始化是合法的为什么
(a) int i = -1;
(b) const int ic = i;
(c) const int *pic =
(d) int *const cpi =
(e) const int *const cpic =
8. 以下代码中的两个sizeof用法有问题吗?
void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
{
for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )
if( 'a'<=str[i] && str[i]<='z' )
str[i] -= ('a'-'A' );
}
char str[] = "aBcDe";
cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;
- void GetMemory(char *p)
{
P = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str,"hello world");
printf(str);
}
请问运行Test函数会有什么样的结果?为什么?
回答问题
1. 请说明strcpy、strncpy和memcpy的区别。
2. const int giNumber = 100; (1)
#define iNumber 100 (2)
(1)和(2)定义的常数,有什么不同之处,哪种更好一些?
3. 断言(ASSERT)和异常(EXCEPTION)的区别是什么,使用的场合有什么区别?
4.struct 和 class 有什么区别?
5. 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
6. 如果一个类会被其它类继承,那么这个类是否一定需要虚析构函数,请简要的说明原因?
7. static 修饰函数、函数内变量;类的属性、类的函数,各起什么作用??
编写程序
1. 编写类String的构造函数、析构函数和赋值函数。
已知类String的原型为:
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String & operate=(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
请编写String的上述4个函数。
2.写代码。有一个作图程序,需要在界面上画出几种图形,包括:方形、三角形、圆形。现在想把通过一次循环调用就把所有形状都画出来。你试着写出这些代码。(不用写具体的类实现代码,写出大致框架代码即可。)