virtual,inline,friend,volatile,mutble,export
来源:互联网 发布:网络用语ddp是什么意思 编辑:程序博客网 时间:2024/06/05 00:40
1.virtual
对于面向对象为特点的C++来说,如何实现多态是一种重要的技术,其中就涉及到virtual关键字的使用。
virtual与成员函数
virtual修饰成员函数时表明此方法可被动态调用,具体使用基类的还是子类的要首先看对象生成的是子类的指针还是基类的,接下来再看是否存在函数的覆盖(函数的重载与多态以及virtual一点关系都没有),总之在virtual修饰的会优先调用子类中的变量和方法。
virtual与纯虚类(包含纯虚函数的类)
包含纯虚函数的类是不能实例化对象的,但是可以进行指针的操作,此类就是实现了接口的功能,在子类中必须实现继承的纯虚函数。
virtual继承
virtual需要注意的问题
virtual是一种动态绑定的机制,所以对用一些静态绑定机制的关键字就不能使用virtual关键字,例如,static,构造函数,内联函数,友元函数,其中的道理是这样的,对于static来说其属于类的所有实例,所有不存在动态绑定的问题,对于内联函数来说,内联函数在编译时就展开,对于virtual这种动态绑定来说是矛盾的;构造函数不能使用virtual(析构函数却建议使用virtual,防止内存泄漏(子类),实现多态时),逻辑推理下,如果构造使用virtual则会首先调用子类的构造,而子类的操作是基于基类对象进行操作,而此时并没有基类对象,所以,必须先进行基类的构造;友元函数不参与继承,所以对一个没继承关系的函数使用动态绑定的操作是完全没有意义的。
2.inline
inline 定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换,(像宏一样展开),没有了调用的开销,效率也很高。
C++关键字,在函数声明或定义中函数返回类型前加上关键字inline,即可以把函数指定为内联函数。关键字inline必须与函数定义放在一起才能使函数成为内联,仅仅将inline放在函数声明前面不起任何作用。inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。一般的,用户可以阅读函数的声明,但是看不到函数的定义。
//SomeInline.h中
#ifndef SOMEINLINE_H
#define SOMEINLINE_H
Type Example(
void
);
//........其他函数的声明
#include"SomeInlie.cpp" //源文件后缀名随编译器而定
#endif
//SomeInline.cpp中
#include"SomeInline.h"
inline
Type Example(
void
)
{
//..........
}
//...............其他函数的定义
inline本身还是有另外一个意义:
一个可执行文件的cpp文件中一个函数只能被定义一次。如果你把函数定义在一个.h文件中并让两个cpp包含就会造成这个函数分别在两个cpp中被定义产生错误。但是inline函数是允许在多个cpp中多次定义的,就解决了这个问题。(已验证)
3.friend友元函数
4.volatile
5.mutable和export
- virtual,inline,friend,volatile,mutble,export
- friend static virtual 总结
- Friend友元inline内联
- hdu 5.1.7 virtual friend
- inline 与 virtual
- Inline Virtual Functions
- static,inline,volatile
- register、volatile、inline
- c++的inline和friend函数
- friend,inline,构造函数初始化列表
- c++ friend functions and inline functions
- virtual函数可以inline吗?
- inline和virtual冲突吗
- inline和virtual冲突吗
- volatile - Multithreaded Programmer's Best Friend
- volatile: The Multithreaded Programmer's Best Friend
- static,inline,volatile的作用
- static,inline,volatile的作用
- 验证表单的demo
- Java核心技术 卷一 笔记八
- c++作业3-本月几天
- java学习(3)-数组以及面向对象
- Windows03.开始玩MFC
- virtual,inline,friend,volatile,mutble,export
- NTC33 Power Station Concert Lucky Draw(ibet Lucky Draw, ibet online casino, Newtown Casino)
- Ubuntu14.04 下安装sublime Text3
- sprintf数据长度疑惑
- C++实验4
- JIRA系统CentOS系统下的开机启动设置
- 【BZOJ 1049】【HAOI 2006】数字序列【DP】
- Java 基础知识总结
- 学习PHP过程中的一些常见代码优化问题