[C++]对象和指针
[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,现在统统不行。
补充:软件开发 , C++ ,