第17章:特殊类成员

来源:互联网 发布:优化驱动器要不要开 编辑:程序博客网 时间:2024/04/29 20:44
1:静态成员变量:用关键字static 来声明静态成员变量 属于类的成员,并不属于对象成员,需要在类外给它分配内存
class A
{
    public:
        A(int num):it(num){total++;}
        ~A(){total--;}
        static int total;
    private:
        int it;
};
int A::total = 0;在类外给静态成员变量分配内存
2:静态成员变量并不属于类中的对象,它属于整个类,需要用类来访问静态成员变量,
因此在创建类的对象的时候并不会给类的静态成员变量分配内存,所以在类外给静态成员变量分配内存,
3:静态成员在没有对象的时候就已经存在
4:私有静态成员函数,声明后在全局进行定义,只能通过公有的成员函数访问,这时就需要创建一个类的对象
5:静态成员函数和静态成员变量一样属于类的成员,它不能访问类的普通成员变量,因为它没有专属于某个对象this指针
6:可以通过对象来访问静态成员函数,尽量使用类成员名限定来访问静态成员
7:静态成员可以被继承,基类和派生类都可以共享静态成员
8:类中的任何函数都可以访问静态成员,但是静态成员函数只能访问静态成员不能访问非静态成员
9:静态成员函数不能被说明成虚函数
10:函数指针:我们知道数组名是指向数组第一个元素的常量指针,同理,函数指针是指向函数第一条指令的常量地址
int (*fun)(int);函数指针fun指向返回值为int带一个int参数
11:函数指针数组:
void (*p[5])(int&,int&);声明了一个含有5个元素的数组指针
12:函数指针也可以作为函数的参数
13:利用关键字typedef来简化函数指针的声明
typedef void (p*)(float&,float&y);
typedef将void (*)(float&,float&y)简化成了p
14:类的成员函数指针
1:成员函数指针的声明
void (A::*p)(int,int)
class A
{
    public:
        void set(int x,int y)
        {
            a = x;
            b = y;
        }
        void show()
        {
        cout<<a<<b<<endl;
        }
    private:
        int a;
        int b;
};
int main()
{
    A a;
    p = &A::set;//&A::set取类A的函数set的地址
    int x = 2,y = 3;
    (a.*p)(x,y);必须加*号不然访问的是函数的地址而不是函数名
    
    //第二种表示的方法
    A *a = new A;
    (a->*p)(x,y);
    表示的是a->获得指针指向的对象
    p指向的是函数的地址*p获得函数名
}


class Human
{
    virtual void run() = 0;
    virtual void eat() = 0;
};
class Mother:public Human
{
    public:
        void run(){cout<<"mother run"<<endl;}
        void eat(){cout<<"mother eat"<<endl;}
};
class father:public Human
{
    public:
        void run(){cout<<"father run"<<endl;}
        void eat(){cout<<"father eat"<<endl;}
};
class uncle:public Human
{
    public:
        void run(){cout<<"uncle run"<<endl;}
        void eat(){cout<<"uncle eat"<<endl;}
};
int mian()
{
    void (Human::*pf)()=0;定义的类的成员函数指针指向的成员函数是一个纯虚函数
}
0 0
原创粉丝点击