2020-04-16

//关于静态数据成员的声明:在类里面 static 数据类型 变量名 类似于:static int a;注意是只能声明不可定义//对于静态数据成员的定义:定义与初始化必须都要在类的外面也就是全局作用域之中, /如果定义不给初始值的话那么就默认为0,一般格式就是 数据类型 类名 变量名::变量名=? 类似于 int course::a=10;/ // 对于静态数据成员的特点:静态数据成员甚至可以在类没有任何对象的时候访问,可以独立访问无需依赖任何对象的建立//对于静态数据成员的说明:静态数据成员被类的所有对象所共享,包括其派生类对象,基类对象和派生类对象共享基类的静态数据成员//对于静态数据成员的特殊性:静态数据成员可以作为成员函数(划重点)的默认形参而普通数据成员不可以 ,另外静态数据成员可公可私 /*比如class Course{ private: static double m; int n ; void fun1(double i=m);语句正确 void fun2(int i=n);}语句错误 *///内部类啥意思://静态数据成员的类型可以是所属类的类型。普通数据成员不可以,除非声明是所属类类型的指针或引用 /*class Course{ private: static double m; Course b(报错); Course *p/&a(正确); static Course *p1(正确); *///静态成员变量在const函数中可以修改,普通的不行//对于静态成员函数:不能调用非静态成员函数,但反过来可以//静态成员函数后面不能有const 关键字//静态成员函数的地址可用普通函数地址来储存,但是普通成员函数需要用类成员函数来储存/*总结:其实声明为静态,不论是静态数据成员还是静态成员函数,它们都是不依赖于对象而存在的,类在定义后并不分配存储空间,而是在定义类的对象的时候才分配存储空间,相反静态的数据成员和静态的成员函数是已经在内存中开辟了内存空间了,所以静态数据成员可以独立的访问在任何类对象没有建立起来都可以访问,并且静态成员函数不可以调用非静态成员函数,因为非静态成员函数只有在类对象建立以后才可以调用,相反则是可以的。我觉得当对某个判断产生怀疑的时候应该去测试,只有验证了才知道是不是对的哈! ////在主函数中我们调用类的非静态成员函数时只能通过类对象来调用,如stu[i].total,但是对于静态成员函数可以直接通过类名+作用域符号来调用,如Student::average。/#includeusing namespace std;class Course{ private: static double m_score; static int n;//静态成员是成员,如果没加,默认private double score; public://函数是公有 Course(double m){//类里面的函数用来实现输出 cout<<“ctor… score”; cin>>m; m_score+=m; n++; cout<<“e:”<<m_score<<endl; } void average(const Course &p){//计算平均值 ,复制构造函数??? cout<<"rage score: "<<p.m_score/p.n<<endl; }}; double Course::m_score=0;//静态成员赋值 int Course::n=0;int main(){ Course p1(80); Course p2(90); Course p3(90); p2.average(p3);}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值