设为首页 加入收藏

TOP

威盛嵌入式笔试的最后两道小题
2014-11-23 20:29:05 来源: 作者: 【 】 浏览:22
Tags:威盛 嵌入式 笔试 最后

题一:


原题如下:改程序,并确定运行结果


#i nclude


#i nclude


#i nclude


char *getstring(void)


{


char p[]=”hello everyone”;


return p;


}


char *getmemory(void)


{


return (char *)malloc(10);


}


int main(int argc, char* argv[])


{


char *p=getmemory();


strcpy(p,”helloworld”);


printf(“%s”,p);


printf(“%s”,getstring());


return 0;


}


这个主要是char p[]前少一个static…


题二:


读程序,写出运行结果


#i nclude


#i nclude


#i nclude


#i nclude


typedef struct


{


int value;


char type;


}head_t;这是什么东西啊?


typedef struct


{


head_t head;


int para;


}message_t;


void main(void)


{


message_t *message=NULL;


head_t *head=NULL;


message=(message_t *)malloc(sizeof(message_t));


assert(message);//测试的条件不成立则终止程序


memset(message,0,sizeof(message_t));


message->para=100;


message->head.type=’a';


head=(head_t *)message;


head->value++;


head->type++;



printf(“message->head.value=%d,message->head.type=%c,message->para=%d\n”,me


ssage->head.value,message->head.type,message->para);


” free(message);


return;


}
#include
#include
using namespace std;
class Student {
public:
Student() {}
Student( const string& nm, int sc = 0 )
: name( nm ), score( sc ) {}
void set_student( const string& nm, int sc = 0 )
{
name = nm;
score = sc;
}
const string& get_name() const
{
return name;
}
int get_score() const
{
return score;
}
private:
string name;
int score;
};
// output student’s name and score
void output_student( const Student& student )
{
cout << student.get_name() << “\t”;
cout << student.get_score() << endl;
}
int main()
{
Student stu( “Wang”, 85 );
output_student( stu );
}
设 计了一个类 Student,数据成员有 name 和 score,有两个构造函数,有一个设置成员数据函数 set_student(),各有一个取得 name 和 score 的函数 get_name() 和 get_score()。请注意 get_name() 和 get_score() 后面都加了 const,而 set_student() 后面没有(也不能有const)。
首先说一点题外话,为什么 get_name() 前面也加 const。如果没有前后两个 const 的话,get_name() 返回的是对私有数据成员 name 的引用,所以通过这个引用可以改变私有成员 name 的值,如
Student stu( “Wang”, 85 );
stu.get_name() = “Li”;


即把 name 由原来的 “Wang” 变成了 “Li”,而这不是我们希望的发生的。所以在 get_name() 前面加 const 避免这种情况的发生。
那么,get_name() 和 get_score() 这两个后面应该加 const的成员函数,如果没有 const 修饰的话可不可以呢?回答是可以!但是这样做的代价是:const对象将不能再调用这两个非const成员函数了。如
const string& get_name(); // 这两个函数都应该设成 const 型
int get_score();
void output_student( const Student& student )
{
cout << student.get_name() << “\t”; // 如果 get_name() 和 get_score() 是非const成员函数,这一句和下一句调用是错误的
cout << student.get_score() << endl;
}
由 于参数student表示的是一个对const Student型对象的引用,所以 student 不能调用非const成员函数如 set_student()。如果 get_name() 和 get_score() 成员函数也变成非const型,那么上面的 student.get_name() 和 student.get_score() 的使用就是非法的,这样就会给我们处理问题造成困难。
因此,我们没有理由反对使用const,该加const时就应该加上const,这样使成员函数除了非const的对象之外,const对象也能够调用它。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇软件项目经常出现的一些问题及改.. 下一篇ASP.NET中共有几种类型的控件?各..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: