很奇怪的事情 这是为何呢?解决思路
很奇怪的事情 这是为何呢??
.h
class b
{
public :
void ww(void)
{
ShowMessage( "ok ");
}
};
class a
{
public :
ss(b*bb)
{
bb-> ww();
}
private:
};
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
b *bb;
a aa;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
.cpp
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bb=new b();
aa.ss(bb);
delete bb;
bb=NULL;
}
//---------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
aa.ss(bb);
}
//---------------------------------------
问题1: 无论是先按Button2 还是先按Button1 都会弹出 "OK "也就是说函数 void ww(void)都会执行. 而且如果我把 aa.ss(bb); 改为 aa.ss(NULL); 也会正常执行. 结果无变化.
问题 2:
大家都把 参数封装为类 解决参数不同的问题,但是如不需要任何参数呢 该怎么解决?? 把参数对象赋值为NULL 吗??可是这样不行哦!
------解决方案--------------------
问题一是因为你的aa.ss中调用bb-> ww()函数里虽然传进了一个b*,但是没有用到this指针(这里的this就是bb),
所以aa.ss(bb); 和 aa.ss(NULL)调用都没有问题。
------解决方案--------------------
学习中
------解决方案--------------------
类的成员函数(b::ww())的实现类似于
ww(b* this), so bb=NULL时也能显示.
((b*)NULL)-> ww();也可以
------解决方案--------------------
当然,因为你没有引用class b的数据成员,仅仅使用了它的方法,而这个方法又没有使用它的数据成员,所以,不管你传入的是什么类型的数据,都会执行正常ww。
对于一个类,如果有数据成员,则每个类实例的数据成员都会有一个地址,但是不管有没有数据成员,这个类的方法只会有一个地址。
.h
class b
{
public :
void ww(void)
{
ShowMessage( "ok ");
}
};
class a
{
public :
ss(b*bb)
{
bb-> ww();
}
private:
};
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
b *bb;
a aa;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
.cpp
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bb=new b();
aa.ss(bb);
delete bb;
bb=NULL;
}
//---------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
aa.ss(bb);
}
//---------------------------------------
问题1: 无论是先按Button2 还是先按Button1 都会弹出 "OK "也就是说函数 void ww(void)都会执行. 而且如果我把 aa.ss(bb); 改为 aa.ss(NULL); 也会正常执行. 结果无变化.
问题 2:
大家都把 参数封装为类 解决参数不同的问题,但是如不需要任何参数呢 该怎么解决?? 把参数对象赋值为NULL 吗??可是这样不行哦!
------解决方案--------------------
问题一是因为你的aa.ss中调用bb-> ww()函数里虽然传进了一个b*,但是没有用到this指针(这里的this就是bb),
所以aa.ss(bb); 和 aa.ss(NULL)调用都没有问题。
------解决方案--------------------
学习中
------解决方案--------------------
类的成员函数(b::ww())的实现类似于
ww(b* this), so bb=NULL时也能显示.
((b*)NULL)-> ww();也可以
------解决方案--------------------
当然,因为你没有引用class b的数据成员,仅仅使用了它的方法,而这个方法又没有使用它的数据成员,所以,不管你传入的是什么类型的数据,都会执行正常ww。
对于一个类,如果有数据成员,则每个类实例的数据成员都会有一个地址,但是不管有没有数据成员,这个类的方法只会有一个地址。