程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [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,現在統統不行。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved