Chinaunix首页 | 论坛 | 博客
  • 博客访问: 396585
  • 博文数量: 67
  • 博客积分: 1707
  • 博客等级: 上尉
  • 技术积分: 725
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-21 09:42
文章存档

2011年(5)

2010年(21)

2009年(41)

分类: C/C++

2009-10-28 14:54:56

1,要通过基类的成员函数来访问。  
  2,
最大的区别是newdeletemalloc/free多了构造和析构函数调用。

xjq2601()回复于 2006-12-13 23:12:43 得分 0

第一题   那不能叫直接访问基类的私有成员吧

lxhtzy(天之翼)回复于 2006-12-13 23:35:57 得分 0

1.设置成友元函数吧。  
   
 
--------个人愚见,请教ing  
 

dxlove958(挥发资源)回复于 2006-12-13 23:38:50 得分 0

1.(补充)既然派生类要访问基类的成员,那何不设成protected?  
  2.
这个问题随便google一下应该会有很多这方面的解释,LZ有手的,是吧?

manrenmanren(蛮人)回复于 2006-12-14 07:21:48 得分 0


  malloc
freeC++/C语言的标准库函数,new/deleteC++的运算符。它们都可用于申请动态内存和释放内存。  
 
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free  
   
               
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。  
   
   
 
由于内部数据类型的对象没有构造与析构的过程,对它们而言malloc/freenew/delete是等价的。  
   
   
 
既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。

manrenmanren(蛮人)回复于 2006-12-14 07:22:00 得分 0

转贴

yourtommy()回复于 2006-12-14 15:38:02 得分 0

哪里的笔试题呀??  
 
第一题实在是无聊,本来私有就是为了不让别人接触,去访问它不是破坏的面向对象的封装性吗??如果非要访问的话,使用this指针,加一个偏移量,找到成员变量的地址,直接改写。这要求对父类的结构很熟悉。  
   
 
第二题,两者的区别在于是否调用构造/析构函数。为什么保留malloc/free?因为C++向下兼容C,还有,当你override   new     delete   函数的时候,你也只能用它们来动态处理内存。

wangyi010704327()回复于 2006-12-14 16:24:35 得分 0

用继承来的基类存取函数访问private变量

OOPhaisky(异化$渴望成功~~回复于 2006-12-14 19:11:23 得分 0

哈哈,这种问题是C++爱好者的最爱,楼主可以看看  
   
 
这个会对第一个题目给你一些提示   :)

OOPhaisky(异化$渴望成功~~回复于 2006-12-14 19:13:13 得分 0

2malloc/free     new/delete有啥区别。  
  -------------------------------------------------------------------------------------  
  malloc/free  
仅仅是分配内存,不会调用constructor/destructor  
  new/delete  
在分配内存之后,会调用constructor/destructor.  
 
即,malloc/free不支持对象语义,而new/delete支持对象语义。

rongcanf(沉默是猪。)回复于 2006-12-14 21:16:15 得分 0

1.  
 
直接访问是不行的,可以在基类声明一个成员函数用来返回私有成员,然后调用该成员函数就可以了  
  2.  
  malloc
free是库函数,而new/deleteC++的运算符,都用于申请和释放内存。  
  malloc
不管构造的对象所需要的字节数,需要用户自己计算,即malloc(sizeof(type)*length);而new可以自己计算对象所需要的字节数,用户只需提供分配的对象个数即可。另外,malloc分配的内存需要强制类型转换为所需对象的指针,即type   *ptype   =(type*)malloc(sizeof(type)*length);new直接返回所分配对象的指针。  
 
对于非内部数据类型,new/delete分配空间的同时会自动调用构造函数和析构函数,而mallocfree不会。  
  new/delete
作为操作符可以被用户重载,而mallocfree作为标准库函数不能为用户重载。  
 
最后,malloc/freenew/delete最好是配对使用。如果new出来的对象去free,那么对象的析构函数没有被调用,会导致程序出错。  
   
 

argenCHN(【夷不谋夏,胡不乱华】)回复于 2006-12-14 21:46:25 得分 0

2,最大的区别是newdeletemalloc/free多了构造和析构函数调用。  
 

love2006()回复于 2006-12-14 21:52:03 得分 0

我现在都不大懂这些,听起来有点迷糊,因为我是个新手,希望哪个高手指点一下下,我将不胜感激!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

love2006()回复于 2006-12-14 21:53:06 得分 0

我也是学V++,现在的我有许多问题??????????

love2006()回复于 2006-12-14 21:54:37 得分 0

我们应该怎么样编一个程序可以读取计算机上的信息

shunan(什么是技术)回复于 2006-12-14 22:04:19 得分 0

哈哈,这不是昨天的笔试题吗,我也做了,楼主哪位阿,这么有缘!

pomiox``睡到自然醒``回复于 2006-12-14 22:08:27 得分 0

1.可以通过友元函数,但要慎用。  
  2.malloc
free是库函数,而new/deleteC++的运算符,都用于申请和释放内存。

xjq2601()回复于 2006-12-14 22:09:29 得分 0

大家都回答的不准确,我今天去面试了,是北京灵图软件公司的笔试题,面试之前还要搞什么情景测试,恶心程度令人发指,每个人梦着眼睛做游戏。。。。。。。。。。。  
 
第一题,我回答的是不可能,结果应该是对了,第二题是个多选题,楼上所有人都只回答了一种情况,那样都算错,另一中情况好象是MALLOC/FREE,new/delete之间有操做符和函数之分,望得到高人的正解!在线等!

studyall123(不想当将军的士兵不是一名好士兵)回复于 2006-12-14 22:47:16 得分 0

mark

suterfo()回复于 2006-12-14 22:47:28 得分 0

,这样也行啊.

haifeng85()回复于 2006-12-14 23:22:08 得分 0

派生类中确实没有办法   直接   访问基类的私有成员  
 
如果要访问的就设置成   保护成员   或者   用友元函数     基类的成员函数访问  
   
 

lxhtzy(天之翼)回复于 2006-12-14 23:50:49 得分 0

另一中情况好象是MALLOC/FREE,new/delete之间有操做符和函数之分,望得到高人的正解!在线等!  
  -------------------------------  
 
上面不是很多人说了吗  
   
  malloc/free
是函数,new/delete是操作符吗

yf956613()回复于 2006-12-14 23:59:46 得分 0

第一题:  
  class     Person  
  {  
  private:  
  char   name[   20   ];  
  public:  
  Person()   {   strcpy(   name,   "Bob"   );   }  
                    void   print()   ;  
  };  
   
   
  //  
派生类  
  class   Student   :   public   Person  
  {  
  public:  
  Student(){}  
  void   print()  
  {  
  //  
计算所要访问的私有成员变量地址并强制转化其类型    
  char*   pName   =   (char*)(   this   )   ;  
  cout   <<   "Name:"<<   pName   <<   endl;  
  }  
  };  
  void   main()  
  {  
  Student   tt;  
  tt.print();  
  }  
   
 
第二题:  
  new/delete  
会做类型检查;malloc/free不会;

pluton(千年之叹)回复于 2006-12-15 00:30:33 得分 0

派生类和基类起始地址相同

swimmer2000(时间是用来浪费的,所以每当我做了一点事都觉得很自豪)回复于 2006-12-15 16:55:01 得分 0

第一题见  
 
不过没什么实际意义.  
   
 
第二题主要是new/delete会调用构造/析构函数,OO

liaowenwen()回复于 2006-12-15 16:58:35 得分 0

恩,能学到不少东西,谢谢

xjq2601()回复于 2006-12-15 20:54:42 得分 0

我懂了,谢谢各位的参与

dbdebuger(深入数据库编程中...回复于 2006-12-16 00:00:31 得分 0

newdelete不仅分配内存,而且初始化

阅读(1524) | 评论(0) | 转发(0) |
0

上一篇:C/C++笔试题4

下一篇:精典C程序设计100例

给主人留下些什么吧!~~