C++考卷
- 格式:doc
- 大小:55.00 KB
- 文档页数:6
1.char s1[] = "";char s2[] = "Hello World";(Hello和World之间是一个空格)char *p = s2;char *r = new char[100];请计算:sizeof(s1)=?1sizeof(s2)=?12sizeof(p)=?4sizeof(r)=?4char s3[10] = {'m','o','b','i','l',};char s4[20] = {'A','N','S','I','\0','C','+','+',};请计算:strlen(s3)=?5strlen(s4)=?4void Func(char str[100]){请计算:sizeof(str)=?4}2.关于内存的问题:void GetMemory(char *p, int num){p = (char*)malloc(sizeof(char)*num);}void Test(void){char *str = NULL;GetMemory(str,100);strcpy(str,"hello");cout<<str<<endl;}请问运行Test函数的结果如何?如果代码有什么问题,请指出来。
void GetMemory2(char **p,int num){*p = (char*)malloc(sizeof(char)*num);}void Test2(void){char *str = NULL;GetMemory2(&str,100);strcpy(str,"hello");cout<<str<<endl;}请问运行Test2函数的结果如何?如果代码有什么问题,请指出来。
char *GetMemory3(int num){char *p = (char*)malloc(sizeof(char)*num);return p;}void Test3(void){char *str = NULL;str = GetMemory3(100);strcpy(str,"hello");cout<<str<<endl;}请问运行Test3函数的结果如何?如果代码有什么问题,请指出来。
char *GetString(){char p[] = "hello world";return p;}void Test4(void){char *str = NULL;str = GetString();cout<<str<<endl;}请问运行Test4函数的结果如何?如果代码有什么问题,请指出来。
char *GetString2(){char *p = "hello world";return p;}void Test5(void){char *str = NULL;str = GetString2();cout<<str<<endl;}请问运行Test5函数的结果如何?如果代码有什么问题,请指出来。
3.下面这段代码摘抄自Callp的文件:cnu_exception_safe_pointers.h。
阅读如下代码,并且回答问题:template<class T>class CNU_Exception_Safe_Ptr{public:typedef CNU_Exception_Safe_Ptr<T> self;// Constructor//CNU_Exception_Safe_Ptr(T * Ptr = 0)括号里面T * Ptr = 0是什么意思?: _m_ptr( Ptr )这行代码是什么意思?{ }为什么成员变量的初始化不放在函数体内而放在成员初始化列表中?// Copy Constructor//// WARNING: Copy constructor modifies object copied.//CNU_Exception_Safe_Ptr(self& x): _m_ptr( x.release() ){ }讲讲你对这个函数的理解。
// Destructor//~CNU_Exception_Safe_Ptr() { delete _m_ptr; }// Release handle on pointer.//T * release() { T * tmp_ptr(_m_ptr); _m_ptr = 0; return tmp_ptr; }讲讲你对这个函数的理解。
// Resets object to use the pointer given.//void reset(T * Ptr = 0)讲讲你对这个函数的理解。
{if ( Ptr != _m_ptr ){delete _m_ptr;_m_ptr = Ptr;}}// WARNING: Assignment operator modifies RHS.//self& operator=(self& rhs)讲讲你对这个函数的理解。
{reset( rhs.release() );return *this; 什么是this?}// Access to pointer.//T * get() const { return _m_ptr; }这句话里面的const是什么意思?T * operator->() const { return _m_ptr; }这句话里面的const是什么意思?T& operator*() const { return *_m_ptr; }为什么这个函数的返回类型是引用,就是&?private:T * _m_ptr;};4.接下来的一段代码是std::String的定义,谈谈对下面代码的理解。
class String{public:String(const char *str = NULL);String(const String& copy);~String();String& operator=(const String& assign);private:size_t m_size;char *m_data;};String::String(const char *str){if(NULL == str){m_data = new char[1];*m_data = '\0';m_size = 0;}else{int length = strlen(str);m_data = new char[length+1];strcpy(m_data,str);m_size = length;}}String::~String(void){delete []m_data;m_data = NULL;}String::String(const String& copy){size_t len = strlen(copy.m_data);m_data = new char[len + 1];strcpy(m_data, copy.m_data);m_size = len;}String& String::operator =(const String& assign){if(this != &assign){delete []m_data;int len = strlen(assign.m_data);m_data = new char[len + 1];strcpy(m_data, assign.m_data);m_size = len;}return *this;}根据所阅读的代码,谈谈对普通构造函数Constructor,拷贝构造函数Copy Constructor,赋值函数Assignment operator 和析构函数Destructor的理解,尤其是string类的这四个函数的所特有的行为的解释。
5.C++新增了4种新的类型转换运算符const_cast, dynamic_cast, static_cast, reinterpret_cast(这个极少用到,因此不做要求),谈谈对它们的理解。
6.谈谈对friend的理解。
7.谈谈对STL(Standard Template Library)的理解,稍微谈谈即可。
8.谈谈对异常处理的理解,稍微谈谈即可。
9.谈谈对C++的3种继承方式:public,protected,和private的理解。
10.谈谈对模板template 的理解,稍微谈谈即可。
11.谈谈对名字空间的理解,稍微谈谈即可。
12.谈谈Overload和Override的区别,还有一种叫做隐藏(也叫遮蔽),这是什么意思?13.谈谈对virtual function及vptr,vtable的理解。
14.C++的函数的入参的传递方式有值传递(pass by value),地址传递(pass by pointer)和引用传递(pass by reference)。
谈谈对这三种方式的理解。
15.谈谈对const的用途的理解。
16.谈谈引用和指针的区别。
17.我们在头文件中经常可以见到如下代码,谈谈对这些代码的理解:#ifndef ABC_H#define ABC_H#include abc.h#endif18.类的静态成员函数能否访问该类的非静态成员变量?为什么?19.什么是RTTI typeid,稍微谈谈即可?20.有了malloc/free为什么还要新产生new/delete?。