[C++]对象和指针

2014-11-24 02:39:49 · 作者: · 浏览: 1

[cpp]
#include
using namespace std;

class time
{
public:
time(int,int,int);
int hour;
int min;
int sec;

void get_time();
};

time::time(int h,int m,int s)
{
hour=h;
min=m;
sec=s;
}

void time::get_time ()
{
cout< }

int main()
{
time t1(10,13,56);
int *p1=&t1.hour; //指向数据成员的指针
cout<<*p1<
time *p2=&t1; //p2指向对象t1的
p2->get_time(); //通过指针调用成员函数
cout<
void(time:: *p3)();
p3=&time::get_time;
//(t1.*p3)();
cout< cout << &time::get_time << endl;

printf("%x\n",p3);
return 0;
}

#include
using namespace std;

class time
{
public:
time(int,int,int);
int hour;
int min;
int sec;

void get_time();
};

time::time(int h,int m,int s)
{
hour=h;
min=m;
sec=s;
}

void time::get_time ()
{
cout< }

int main()
{
time t1(10,13,56);
int *p1=&t1.hour; //指向数据成员的指针
cout<<*p1<
time *p2=&t1; //p2指向对象t1的
p2->get_time(); //通过指针调用成员函数
cout<
void(time:: *p3)();
p3=&time::get_time;
//(t1.*p3)();
cout< cout << &time::get_time << endl;

printf("%x\n",p3);
return 0;
}问题:

问题1:cout< 问题2:cout<


解答:

问题1:类外对<<并未重载,所以无法输出 *p2即t1;

问题2:因为取出来的那个地址,是一个void(A:: *)()类型,并不是普通的指针。然后使用cout 输出这个类型,cout可能直接当成bool型输出了。
因为cout << 能接受那么多类型是靠重载,但是肯定没 void(A:: *)()类型的重载

可是试试用Printf()替换,来输出,看地址。

C++以后已经没有任何东西是默认的了。

C89可以不写函数返回值,变量类型,直接默认int,现在统统不行。