您的位置:首页 > 其它

普通成员函数、普通类成员函数和静态类成员函数

2017-12-25 21:40 148 查看
/*
2017-12-26  创建人:Ruo_Xiao
*/


#include "stdafx.h"
#include <iostream>
using namespace std;

int cross(int i,int t);

class CA
{
public:
CA()
{
k = 100;
}
~CA()
{
;
}
public:
int k;
public:
int X_R(int i,int t)
{
return (i+t)*cross(i,t);
}
static int add_1(int i,int t)
{
return (i+t);
}
static int add_2(CA *p,int i,int t)
{
return (i+t+p->k);
}
};

int _tmain(int argc, _TCHAR* argv[])
{
int R1 = CA::add_1(11,90);
CA B;
int R2 = B.X_R(3,5)*cross(1,2);
int R3 = CA::add_2(&
4000
B,20,30);

cout<<"R1 = "<<R1<<endl;
cout<<"R2 = "<<R2<<endl;
cout<<"R3 = "<<R3<<endl;

cin.get();
return 0;
}

int cross(int i,int t)
{
return i*t;
}




一、普通成员函数

上述代码中,cross函数既可以在类成员函数中调用,亦可在类外调用。说明普通成员函数调用位置不受限制。

二、普通类成员函数

C++ 普通成员函数本质上是一个包含指向调用该函数的对象的this指针的普通函数,即C++类的普通成员函数都隐式包含一个指向当前对象的this指针(第一个形参!)。

上述代码中,

B.X_R(3,5);


相当于

X_R(&B,3,5);


即:

int CA::X_R(int i,int t)
{
return (i+t)*cross(i,t);
}


相当于

int CA::X_R(CA *this,int i,int t)
{
return (i+t)*cross(i,t);
}


属于类,即不同的对象在内存中共用一个函数,不像类成员变量那样不同的对象有不同的拷贝(内存)。

区分方法是“->”或者“.”将对象的this指针传进函数体内。

成员函数的地址,编译期就已确定,并静态绑定或动态的绑定在对应的对象上。对象调用成员函数时,早在编译期间,编译器就可以确定这些函数的地址,并通过传入this指针和其他参数,完成函数的调用,所以类中就没有必要存储成员函数的信息。

三、静态成员函数

类普通成员函数前面加个“static”关键字即可成为静态成员函数。

属于类而不属于该类的对象。

调用方式:类名::静态成员函数,故不传对象的指针,通常用于对静态成员变量的操作。

创建时期:类加载时就被分配了内存(全局区)。

不可访问非静态成员(变量和函数),因为该静态成员函数存在时,非静态成员不一定存在。或者因为静态成员函数没有隐藏的this指针,故无法调用非静态的成员。若要引用非静态成员,请引入对象指针。

四、源码

http://download.csdn.net/download/itworld123/10174599
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐