C++知识问答2-创新互联
1、static关键字在c语言和C++语言中各自有哪些不同用法?
创新互联坚实的技术研发基础赢得了行业内的良好口碑,公司成立十余年来,为千余家企业提供过网站建设、软件开发、搜索引擎优化技术、互联网大数据整合营销服务,多年的技术服务成功经验、众多的客户使我们能懂得更多,做得更好。"让您的网站跑起来"是我们一直追求的目标!解析:C++兼容C语言中对于static的定义;C++中多了对于面向对象特性相关的引用。
c语言中的作用:1)修饰变量;2)修饰函数。
1)修饰变量:a.修饰全局变量,改变全局变量的作用域,使其仅在声明文件中可见,对其他文件不可见,限制其使用范围;b.修饰局部变量,延长变量的声明周期,作用域不变,普通局部变量随着作用域结束,释放其栈上内存,用static修饰后,其内存将在程序结束才进行释放。
2)修饰函数:和全局变量一样,改变了函数被调用的范围。
C++中的作用:被static修饰的变量/函数,表示其属于这个类,但是不属于任一个特定的对象。
1)静态数据成员,必须在类外进行初始化,因其不属于任何一个对象;
2)静态成员函数:本身只能访问静态变量,不可以访问其他非静态成员变量。
2、面向对象有哪些基本特性?
解析:面向对象基本概念:类,对象,继承;基本特征:封装、继承、多态。
1)封装:【定义】数据和代码捆绑在一起,避免外界干扰和不确定性访问;【引申】注意与组合的区分,封装指一个类内数据方法独立,对外开放限制;组合指不同对象之间包含关系。
2)继承:【定义】让某种类型对象获得另一个类型对象的属性和方法;
【功能】可以使用现有类,并在无需重新编写原有类的情况下对这些功能进行扩展;
【方式】实现继承(使用基类属性和方法,无需额外编码);接口继承(使用基类的属性和方法名称,但子类必须提供实现),可视继承(子窗体/类使用基窗体/类的外观和实现代码能力)。
3)多态:【定义】同一事物表现出不同事物的能力,即向不同对象发送同一消息,不同的对象在接收时候会产生不同的行为。
【引申】:重载是不是多态?重载是一个类内的不同方法,不属于继承。可以认为是广义多态,理解为编译时候的静态多态,也可以认为其不是对象间调用形成,可以认为不是多态,只有重写才算多态。没有明确定义。
【功能】多态性允许将父对象设置成为和一个更多的他的子对象相等的技术,赋值后,父对象就可以根据当前赋值给它的子对象的特性调用不同的方式运作。也即接口重用。
【简单概括】允许将子类类型的指针赋值给父类类型的指针。
3、虚函数相关介绍
1)继承层次中,基类析构函数为虚函数:针对多态属性,当单基类指针实际所指对象为继承类对象,如果析构函数不为虚函数,当释放该对象内存时候,将只调用基类析构函数,使得继承类对象的自有数据无法释放,造成内存泄漏问题;因此,需要将基类析构函数定义为虚函数;释放该类对象内存时候,先调用继承类析构函数,然后在调用基类析构函数。
2)构造函数不能为虚函数:a.构造一个对象时候,必须知道对象的实际类型,而虚函数是在运行期间确定实际类型的。所以,如果构造函数为虚函数,则构造一个对象时候,由于对象未构造成功,编译器不知道实际对象的类型,无法确定。b.虚函数实现依赖虚函数表,而虚函数表的指针vptr是在构造函数中初始化的,所以如果构造函数为虚函数,虚函数表没被初始化,无法进行。
3)虚函数运行代价:每个虚函数的对象需要维护一个虚函数表(通过虚指针指向这个虚函数表),因此在使用虚函数的时候都会产生一定的系统开销。
4)inline/static/constructor这三种函数不能为虚函数:inline是编译时展开,必须有实体;static属于class自己的类相关,必须有实体,而且没有this指针,无法调用虚函数;constructor参见2)。
4、几种继承方式
解析:1)public继承:派生类对象可以访问基类中的公有成员,派生类成员函数可以访问基类中的公有和受保护成员;
2)private继承:基类的成员只能被直接派生类的成员访问,无法再往下继承;
3)protected继承:基类的成员也只被直接派生类的成员访问,无法再往下继承;
4)虚继承:为了解决多继承时的命名冲突和冗余数据问题;虚继承目的是为了让某个类做出声明,承诺愿意共享它的基类;典型代表为:C++标准库中的iostream类。
使用多继承经常出现二义性,必须十分小心,一般只有比较简单和不易出现二义性或者实在需要时候使用多继承,能用单一继承的就不用多继承。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享名称:C++知识问答2-创新互联
本文来源:http://myzitong.com/article/epsic.html