[cpp]
#include <iostream>
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<<hour<<":"<<min<<":"<<sec<<endl;
}
int main()
{
time t1(10,13,56);
int *p1=&t1.hour; //指向數據成員的指針
cout<<*p1<<endl; // cout << 10
time *p2=&t1; //p2指向對象t1的
p2->get_time(); //通過指針調用成員函數
cout<<p2<<endl;
void(time:: *p3)();
p3=&time::get_time;
//(t1.*p3)();
cout<<p3<<endl;
cout << &time::get_time << endl;
printf("%x\n",p3);
return 0;
}
#include <iostream>
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<<hour<<":"<<min<<":"<<sec<<endl;
}
int main()
{
time t1(10,13,56);
int *p1=&t1.hour; //指向數據成員的指針
cout<<*p1<<endl; // cout << 10
time *p2=&t1; //p2指向對象t1的
p2->get_time(); //通過指針調用成員函數
cout<<p2<<endl;
void(time:: *p3)();
p3=&time::get_time;
//(t1.*p3)();
cout<<p3<<endl;
cout << &time::get_time << endl;
printf("%x\n",p3);
return 0;
}問題:
問題1:cout<<p2<<endl;改成 cout<<*p2<<endl; 為什麼會報錯?
問題2:cout<<p3<<endl; 為什麼p3的值是1?難道公用成員函數get_time()此時的內存地址是1?即使是1也應該寫成十六進制 000001的形式才對啊。
解答:
問題1:類外對<<並未重載,所以無法輸出 *p2即t1;
問題2:因為取出來的那個地址,是一個void(A:: *)()類型,並不是普通的指針。然後使用cout 輸出這個類型,cout可能直接當成bool型輸出了。
因為cout << 能接受那麼多類型是靠重載,但是肯定沒 void(A:: *)()類型的重載
可是試試用Printf()替換,來輸出,看地址。
到C++以後已經沒有任何東西是默認的了。
C89可以不寫函數返回值,變量類型,直接默認int,現在統統不行。