对象与指针

#include<iostream>
#include<cstring>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std;
class Date
{
public:
    int day,month,year;
    void init(int,int,int );
    void print();
};

void Date::init(int yy,int mm,int dd)
{
    year=yy;
    month=mm;
    day=dd;
}
void Date::print()
{
    cout<<year<<" "<<month<<" "<<day<<endl;
}

int main()
{
    Date date1;
    date1.init(2,2,2);
    Date *date2;
    date2=new Date;//注意申请空间,当定义一个指针类时,需申请空间,但是(Person p)时,这个时候不需要申请空间
    date2->init(1,1,1);
    date2->print();//指向对象的指针,输出结果是1 1 1
    int *t2;
    t2=&date1.month;
    cout<<*t2<<endl;//普通变量的指针,输出结果是2
    Date *p1=&date1;
    p1->init(2005,3,28);
    p1->print();
    int *p2;
    p2=&date1.year;
    cout<<*p2<<endl;
    void(Date::*p3)(int,int,int );//指向成员函数的指针。
    void(Date::*p4)();
    p3=&Date::init;//这个地方注意加上取地址符,课本上错了
    p4=&Date::print;
    (date1.*p3)(2006,4,8);
    (date1.*p4)();
    return 0;
}

具体声明一个指向成员函数的指针的时,我觉得可以分为三部分.

第一部分,声明。

函数的返回值类型(类名::指针变量名)目标函数的参数。

ex:void (Date::*p1)(int ,int ,int );

第二部分,指向(我自己编的名字,不用在意这些细节)。

指针变量名=& 类名::函数名(不带参数)。

ex:p1=&Date::init;

第三部分,赋值

(申请的类的名称.指针变量名)(1 ,1,1);

ex:(date1.*p)(1,1,1);



猜你喜欢

转载自blog.csdn.net/let_life_stop/article/details/80928667