最近在玩C++,想找個地方把自己學習的感悟記錄下來。於是就想到了這個地方,這篇文章會不斷的更新,希望自己能堅持......
一 關於指向對象成員函數的指針的問題
定義指針:數據類型名 (類名::*指針變量名)(參數列表);
指針賦值:指針變量名=&類名::成員函數名;//千萬不要把函數的參數列表帶上
引用:(對象名.*指針變量名)(參數列表);//前面那對括號一定要
另外,只有公用成員才能這樣通過指針來訪問
eg.
class test
{
public:
int getarea();
......
};
test A;
int (test::*p)();
p=&test::getarea;//不要寫成:p=&test::getarea();
cout<<(A.*p)()<<endl;//不要寫成:cout<<A.*p<<endl;或cout<<A.*p()<<endl;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
二 關於純虛函數
一般形式:
virtual 函數類型 函數名 (參數列表) =0;
注意問題:
1.一個類中含有純虛函數,叫做抽象類.抽象類只能被繼承,不能被實例化.
//eg.
現在我有一個抽象類circle,那麼我就不能在類外出現這樣的語句: circle A;
2.純虛函數在派生類中必須重載,否則不能通過.並且重載時,函數的形式要與聲明純虛函數時一樣.
//eg.
virtual double get_a ()const=0;
virtual double get_a() //錯誤,要加上const
{return 3.14;}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
三 申明指針必須初始化
eg. char *a;
cin>>a; //錯誤,由於指針沒有初始化,很容易跑飛
應該這樣:
char *a=new char[10]; //a只能存儲10個字符
cin>>a;