主题 2028|帖子 2028|积分 6084
您需要 登录 才可以下载或查看,没有账号?立即注册
面试官:C++中,设计一个类要注意哪些东西? 二师兄:设计一个类主要考虑以下几个方面:1.面向对象的封装、继承及多态。2.big three或者big five。3.运算符和函数重载、静态成员、友元、异常处理等相关问题。 面试官:请介绍一下面向对象的三个特性。 二师兄:封装是将类的函数和数据封装起来,外部不能直接访问类的数据,而是需要通过方法访问数据。继承是指一个类可以继承另一个类的属性和方法。多态是指一个对象可以表现出多种形态。 面试官:请问多态是如何实现的? 二师兄:多态的是通过父类的指针或引用指向子类的对象实现的。在对象中维护一个虚指针(vtptr),这个指针指向一个虚表(vtable),当用户通过父类对象访问子类的方法时,通过查询虚表中对应的方法的地址,并跳转到此地址执行间接访问对象的方法。所以多态是有一点点运行时开销的。 面试官:你刚才所说的big three和big five是什么? 二师兄:(嘿嘿,被装到了)类的big three分别是拷贝构造函数(copy constructor)、拷贝赋值运算符(copy assignment)和析构函数。而类的big five则多了两个,分别是移动构造函数(move constructor)和移动赋值运算符(move assignment)。后面两个是C++11之后引入的。 面试官:好的。那你知道为什么要引入移动构造和移动赋值吗? 二师兄:主要是为了效率。移动构造和移动赋值不需要把所有的数据重新拷贝一遍,而是霸占了被移动对象的数据的所有权。代价是被移动对象在被移动后不能使用。 面试官:嗯。那你知道为什么移动构造和移动赋值都要加上noexcept关键字吗? 二师兄:额。。。好像不让抛异常? 面试官:你知道类的静态成员变量需要注意哪些问题吗? 二师兄:要注意哪些问题?额。。。 面试官:在成员方法后加const是为什么? 二师兄:主要是为了约束这个成员方法不更改对象的任何数据。 面试官:还有其他的原因吗? 二师兄:好像没有了吧。。。 面试官:类的成员方法可以通过const符号重载吗? 二师兄:这个,,应该可以吧。。 面试官:你知道什么是类的成员方法的引用限定符吗? 二师兄:没有听说过耶。。。 面试官:好的,回去等通知吧。
为什么移动构造和移动赋值都要加上noexcept关键字?
类的静态成员变量需要注意哪些问题?
在成员方法后加const是为什么?
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
忿忿的泥巴坨