C++第六章课后习题(4)

2019-01-10 14:19

char street[30]; char city[18]; char zip[6]; public: Employee(char*n,char*str,char*ct,char*z); void setName (char*n); void display(); };

Employee::Employee(char*n,char*str,char*ct,char*z) { strcpy(name,n); strcpy(street,str); strcpy(city,ct); strcpy(zip,z); }

void Employee::setName (char*n) { strcpy(name,n); }

void Employee ::display (){ cout<

int main(){ Employee e1(\逗逼\马勒戈壁3号\葫芦岛\ e1.display (); cout<

6-28分别将例6-10程序和6-16程序中对指针的所有使用都改写为与之等价的引用形式,比较修改前后的程序,体会在哪些情况下使用指针更好,哪些情况下使用引用更好。 解:6-10

#include using namespace std;

void splitFloat(float x,int&intPart ,float&fracPart){ intPart=static_cast(x); fracPart=x - intPart; }

int main(){ cout<<\ for(int i=0;i<3;i++){ float x,f; int n; cin>>x; splitFloat(x,n,f); cout<<\ } return 0; }

6-16

#include using namespace std; class Point { public: Point (): x(0),y(0) { cout<<\ } Point(int x ,int y):x(x),y(y){ cout<<\ } ~Point (){cout<<\ int getX()const{return x;} int getY()const{ return y;} void move (int newX,int newY){ x=newX; y=newY; } private: int x,y; };

int main (){ cout<<\ Point &ptrl=*new Point; delete &ptrl; cout<<\ ptrl=*new Point(1,2);

}

delete &ptrl; return 0;

6-29运行下面的程序,观察执行结果,指出该程序是如何通过指针造成安全性隐患的,思考如何避免这种情况的发生。 #include using namespace std; int main() {

int arr[]={1,2,3};

double*p=reinterpret_cast(&arr[0]); *p=5;

cout<

解:在32位平台下,一般int是4个字节,double 是8个字节,代码第5、6行强制转换后的赋值过程中修改了arr[0] , arr [1] , 的内存空间,因此导致arr[1]的非预期输出。

避免这种情况的措施:1、尽量避免使用类型转换;2、必须使用类型转换时,尽量开辟新的内存空间,在新内存空间中完成转换。3、必须使用原有内存空间时,要特别注意各种数据类型在不同平台下的内存占用大小。

6-30 static_cast,const_cast和reinterpret_cast各自应在哪些情况下使用?

解:static_cast运算符实现类型间的转换,但没有运行时类型检查来保证转换的安全性。 Cosnt_cast运算符用来修改类型的const或volatile属性。可以去除对象或者变量const或volatile属性。

Reinterpret_cast可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针。


C++第六章课后习题(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年河北省对口升学计算机专业理论试题(附答案)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: