number.half.second='b';
printf("%x\n", number.i);
getch();
}
答案: AB (0x41 对应'A',是低位;Ox42 对应'B',是高位)
6261 (number.i 和 number.half 共用一块地址空间)
11. 已 知 strcpy 的函 数原 型: char *strcpy(char *strDest, const
char *strSrc)其中 strDest 是目的字符串,strSrc 是源字符串。不
调用 C++/C 的字符串库函数,请编写函数 strcpy。
答案:
char *strcpy(char *strDest, const char *strSrc)
{
if ( strDest == NULL || strSrc == NULL)
return NULL ;
if ( strDest == strSrc)
return strDest ;
char *tempptr = strDest ;
while( (*strDest++ = *strSrc++) != ‘\0’)
;
return tempptr ;
}
12. 已知 String 类定义如下:
class String
{
public:
String(const char *str = NULL); // 通用构造函数
String(const String &another); // 拷贝构造函数
~ String(); // 析构函数
String & operater =(const String &rhs); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
尝试写出类的成员函数实现。
答案:
String::String(const char *str)
{
if ( str == NULL ) //strlen 在参数为 NULL 时会抛异常才会有
这步判断
{
m_data = new char[1] ;
m_data[0] = '\0' ;
}
else
{
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}
}
String::String(const String &another)
{
m_data = new char[strlen(another.m_data) + 1];
strcpy(m_data,other.m_data);
}
String& String::operator =(const String &rhs)
{
if ( this == &rhs)
return *this ;
delete []m_data; //删除原来的数据,新开一块内存
m_data = new char[strlen(rhs.m_data) + 1];
strcpy(m_data,rhs.m_data);
return *this ;
}
String::~String()
{
delete []m_data ;
}
13. .h 头文件中的 ifndef/define/endif 的作用?
答:防止该头文件被重复引用。
14. #i nclude<file.h> 与 #i nclude "file.h"的区别?
答:前者是从 Standard Library 的路径寻找和引用 file.h,而后
者是从当前工作路径搜寻并引用 file.h。
15.在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加
extern “C”?
首先,作为 extern 是 C/C++语言中表明函数和全局变量作用范
围(可见性)的关键字,该关键字告诉编译器,其声明的函数
和变量可以在本模块或其它模块中使用。
通常,在模块的头文件中对本模块提供给其它模块引用的函数
和全局变量以关键字 extern 声明。例如,如果模块 B 欲引用该
模块 A 中定义的全局变量和函数时只需包含模块 A 的头文件
即可。这样,模块 B 中调用模块 A 中的函数时,在编译阶段,
模块 B 虽然找不到该函数,但是并不会报错;它会在连接阶段
中从模块 A 编译生成的目标代码中找到此函数
extern "C"是连接申明(linkage declaration),被 extern "C"修饰的
变量和函数是按照 C 语言方式编译和连接的,来看看 C++中对
类似 C 的函数是怎样编译的:
作为一种面向对象的语言,C++支持函数重载,而过程式语言
C 则不支持。函数被 C++编译后在符号库中的名字与 C 语言的
不同。例如,假设某个函数的原型为:
void foo( int x, int y );
该函数被 C 编译器编译后在符号库中的名字为_foo,而 C++编
译器则会产生像_foo_int_int 之类的名字(不同的编译器可能生
评论0
最新资源