C++中函数调用非虚成员函数、调用虚函数的区别:
1.调用非虚成员函数:和调用非成员函数一样,通过对象确定对象所属的类,然后找到类的成员函数。此过程不会涉及到对象的内容,只会涉及对象的类型,是一种静态绑定。
2.调用虚函数与调用非虚成员函数不同,需同过虚函数表找到虚函数的地址,而虚函数表存放在每个对象中,不能再编译期间实现。只能在运行时绑定,是一种动态绑定。
类中的成员函数与 inline
定义在类中的成员函数缺省都是内联的,如果在类定义时就在类内给出函数定义,那当然最好。如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上 inline,否则就认为不是内联的。例如:
class A { public:void Foo(int x, int y) { } // 自动地成为内联函数 }
将成员函数的定义体放在类声明之中虽然能带来书写上的方便,但不是一种良好的编程风格,上例应该改成:
// 头文件 class A { public: void Foo(int x, int y); } // 定义文件 inline void A::Foo(int x, int y){}
inline 是一种用于实现的关键字
关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。
如下风格的函数 Foo 不能成为内联函数:
inline void Foo(int x, int y); // inline 仅与函数声明放在一起 void Foo(int x, int y){}
而如下风格的函数Foo 则成为内联函数:
void Foo(int x, int y); inline void Foo(int x, int y) {} // inline 与函数定义体放在一起
更多 inline 用法可以查阅:C++ 中的 inline 用法
:: 叫作用域区分符,指明一个函数属于哪个类或一个数据属于哪个类。
:: 可以不跟类名,表示全局数据或全局函数(即非成员函数)。
int month;//全局变量 int day; int year; void Set(int m,int d,int y) { ::year=y; //给全局变量赋值,此处可省略 ::day=d; ::month=m; } Class Tdate { public: void Set(int m,int d,int y) //成员函数 { ::Set(m,d,y); //非成员函数 } private: int month; int day; int year; }
来源:钱能%20C++程序设计教程——设计思想与实现
在Visual Studio 2015里使用Sleep函数首字母S必须大写,必须#include ,Sleep括号里的数字为毫秒,5秒的话写成Sleep(5000)。
#include <iostream> #include <ctime> #include <Windows.h> using namespace std; int main() { time_t start_t, end_t; time(&start_t); Sleep(5000); time(&end_t); cout << start_t << endl; cout << end_t << endl; cout << difftime(end_t, start_t) << endl; system("pause"); return 0; }
在Visual Studio 2015里使用gmtime报错C4996提示gmtime不安全,推荐使用gmtime_s。
#include <iostream> #include <ctime> using namespace std; int main() { time_t rawtime; struct tm info; time(&rawtime); gmtime(&rawtime); gmtime_s(&info, &rawtime); printf("伦敦:%2d:%02d\n", info.tm_hour, info.tm_min); system("pause"); return 0; }
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
1999cpp-class-member-functions
C++中函数调用非虚成员函数、调用虚函数的区别:
1.调用非虚成员函数:和调用非成员函数一样,通过对象确定对象所属的类,然后找到类的成员函数。此过程不会涉及到对象的内容,只会涉及对象的类型,是一种静态绑定。
2.调用虚函数与调用非虚成员函数不同,需同过虚函数表找到虚函数的地址,而虚函数表存放在每个对象中,不能再编译期间实现。只能在运行时绑定,是一种动态绑定。
1998cpp-class-member-functions
类中的成员函数与 inline
定义在类中的成员函数缺省都是内联的,如果在类定义时就在类内给出函数定义,那当然最好。如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上 inline,否则就认为不是内联的。例如:
将成员函数的定义体放在类声明之中虽然能带来书写上的方便,但不是一种良好的编程风格,上例应该改成:
inline 是一种用于实现的关键字
关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。
如下风格的函数 Foo 不能成为内联函数:
而如下风格的函数Foo 则成为内联函数:
更多 inline 用法可以查阅:C++ 中的 inline 用法
1997cpp-class-member-functions
:: 叫作用域区分符,指明一个函数属于哪个类或一个数据属于哪个类。
:: 可以不跟类名,表示全局数据或全局函数(即非成员函数)。
1996c-function-difftime
在Visual Studio 2015里使用Sleep函数首字母S必须大写,必须#include,Sleep括号里的数字为毫秒,5秒的话写成Sleep(5000)。
1995c-function-gmtime
在Visual Studio 2015里使用gmtime报错C4996提示gmtime不安全,推荐使用gmtime_s。