分类: C/C++
2009-10-28 14:54:56
1,要通过基类的成员函数来访问。
2,最大的区别是new和delete比malloc/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与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
由于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/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
2。malloc/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/delete是C++的运算符,都用于申请和释放内存。
malloc不管构造的对象所需要的字节数,需要用户自己计算,即malloc(sizeof(type)*length);而new可以自己计算对象所需要的字节数,用户只需提供分配的对象个数即可。另外,malloc分配的内存需要强制类型转换为所需对象的指针,即type *ptype =(type*)malloc(sizeof(type)*length);而new直接返回所分配对象的指针。
对于非内部数据类型,new/delete分配空间的同时会自动调用构造函数和析构函数,而malloc和free不会。
new/delete作为操作符可以被用户重载,而malloc和free作为标准库函数不能为用户重载。
最后,malloc/free和new/delete最好是配对使用。如果new出来的对象去free,那么对象的析构函数没有被调用,会导致程序出错。
楼argenCHN(【夷不谋夏,胡不乱华】)回复于 2006-12-14 21:46:25 得分 0
2,最大的区别是new和delete比malloc/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/delete是C++的运算符,都用于申请和释放内存。
楼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
new和delete不仅分配内存,而且初始化