标签:
ps:const对象只能调用const函数!!非const对象随便!!
成员指针只应用于类的非 static 成员。static 类成员不是任何对象的组成部分,所以不需要特殊语法来指向 static 成员,static 成员指针是普通指针。
int *p = &Screen::total; (total 是 static int total;)
例子:
#include<iostream>
using namespace std;
class Screen{
public:
static int total;
int sum;
Screen():sum(2){}
int a(int i, int j){
cout<<244<<endl;
return 8;
}
};
int Screen::total = 6;
int main(){
Screen sc;
int *ptr = &Screen::total;
int Screen::*p1 = &Screen::sum;
int (Screen::*p2)(int, int) = &Screen::a;
cout<<sc.*p1<<"**"<<sc.total<<"**"<<(sc.*p2)(1,2)<<endl;
cout<<*ptr<<endl;
return 0;
}
输出:
244 ----------先出来
2**6**8
l 声明成员指针
class Screen {
public:
typedef std::string::size_type index;
char get() const;
char get(index ht, index wd) const;
private:
std::string contents;
index cursor;
index height, width;
};
ü 定义数据成员的指针
如contents
string Screen::*ptr = &Screen::contents;
Screen::index Screen::*p = &Screen::cursor;
ü 定义成员函数的指针
成员函数的指针必须在三个方面与它所指函数的类型相匹配:
1. 函数形参的类型和数目,包括成员是否为 const。
2. 返回类型。
3. 所属类的类型。
如get()
char (Screen::*p)()const = &Screen::get;
char (Screen::*p)(Screen::index, Screen::index)const = &Screen::get;
ü 为成员指针使用类型别名
typedef char (Screen::*Action)(Screen::index, Screen::index) const;
Action p = &Screen::get;
l 使用类成员指针
? 成员指针解引用操作符(.*)从对象或引用获取成员。
ps:不能重载的操作符(:: . .* ?:)
必须成员函数(= [] () ->)
必须友元(<< >>)
? 成员指针箭头操作符(->*)通过对象的指针获取成员。
ü 使用成员函数指针
char (Screen::*pmf)() const = &Screen::get;
Screen myScreen;
char c1 = myScreen.get();
char c2 = (myScreen.*pmf)(); // equivalent call to get
Screen *pScreen = &myScreen;
c1 = pScreen->get();
c2 = (pScreen->*pmf)(); // equivalent call to get
因为调用操作符(())比成员指针操作符优先级高,所以调用(myScreen.*pmf)() 和 (pScreen->*pmf)() 需要括号。
ü 使用数据成员指针
Screen::index Screen::*pindex = &Screen::width;
Screen myScreen;
Screen::index ind1 = myScreen.width;
Screen::index ind2 = myScreen.*pindex; // dereference to get width
Screen *pScreen;
ind1 = pScreen->width;
ind2 = pScreen->*pindex; // dereference pindex to get width
ps:不要加括号!!!
****************成员函数的指针不同与普通函数的指针************
成员函数的指针:
char (Screen::*pmf)() const = &Screen::get; //必须有&
使用是 (myScreen.*pmf)() 或者 (pScreen->*pmf)()
普通函数的指针:
char (*pmf)() const = &get; 或者 char (*pmf)() const =get;
使用是 pmf() 或者 (*pmf)()
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qhairen/article/details/47313505