先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。
理解了这个,就好解释this了,my里的this 就是指向my的指针。如果还有一个变量myclass mz,mz的this就是指向mz的指针。 这样就很容易理解this 的类型应该是myclass *,而对其的解引用*this就应该是一个myclass类型的变量。
通常在class定义时要用到类型变量自身时,因为这时候还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。
#include<iostream.h>
class Point
{
public:
};
{
}
MovePoint函数的原型应该是 void MovePoint( Point *this, int a, int b);第一个参数是指向该类对象的一个指针,我们在定义成员函数时没看见是因为这个参数在类中是隐含的。这样point1的地址传递给了this,所以在MovePoint函数中便显式的写成:
void MovePoint(int a, int b) { this->x +=a; this-> y+= b;}
即可以知道,point1调用该函数后,也就是point1的数据成员被调用并更新了值。
即该函数过程可写成 point1.x+= a; point1. y + = b;
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,它时时刻刻指向你这个实例本身。
this 可以直接访问一个隐藏的指针,这个指针就称为 this 指针。它实际上是类定义中一个缺省的预定义的指针。当调用一个成员函数时,系统保证this 指针始终指向产生这个调用的对象,并将该指针作为一个变元自动传递给该函数。同时,只有对象和成员函数之间才存在 this 指针。
【示例】下面一段程序创建一个叫做power的类来计算一个数的幂:
这个生命周期同任何一个函数的参数是一样的,没有任何区别。
因为,成员函数默认第一个参数就是this。
举例:
class
};
func的原型在编译器看来,应该是
int
即开始执行成员函数之前,构造。
成员函数执行结束,清除。
如果class或者struct里没有成员函数,this是没有构造函数的。只能当作C的STRUCT使用
C++,this指针问题~
一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。
这个:this->n = n;
在这样的形式下,哪个n是成员变量? 哪个n是参数?
我看了几篇文章,说法都不一致哟~
彻底整得头大了。
class figure{
public:
vitual double getArea()=0;
};
class rectangle:public figure{
protected:
double height;
double width;
public:
rectangle(){};
rectangle(double height,double width){
this->height=height;
this->width=width;
}
double getArea()
{return height*width;}
};
class square:public rectangle{
public:
square(double width){
height=this->width=width;
}
};
如现在figure *figures[2]={new rectange(5,6),new square(5)};
for (int i=1;i<3;i++)
cout<<(figures[i])->getArea()<<endl;
到底是如何传参的哟?简单说说就行,不胜感激~或直接说明前面问题就行了~谢谢啦~
protected:
double height;
double width;
还是double width?
这样说来是square(double width)那儿的width叫做成员变量喽?如果这样讲就通了。
在说一说,你列举的具体实例吧。figure *figures[2]={new rectange(5,6),new square(5)};
这一句,似乎很复杂,其实不然。我们知道类的赋值原则中有这样的一条,就是派生类指针可以赋值给基类指针。而这条语句中,*figures[2]是一个指针数组,就是含有两个基类指针的数组。在花括号里是对他们赋值。new rectange(5,6),new square(5)}; 第一个是调用 rectangle构造函数.建立了一个height=5,width=6的长方形(rectangle);第二个是调用了square的构造函数。
至于:
square(double width){
height=this->width=width;
}
其实你前面说的话已经对这个问题给予了解决,即当菲静态成员函数的参数与成员变量名相同时要用this指针(显示调用)。显然不相同的时候是隐式调用的。height=this->width=width就是说对象的成员变量height,width.均被形参赋予相同的值。