当前位置:编程学习 > C/C++ >>

[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++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,