滨州网站开发网络营销网站有哪些
原文链接
- 总结:
- 静态成员函数只能访问静态数据成员。
- 非静态成员函数可以访问静态数据成员。
- 公有静态数据成员和静态数据函数,可以直接通过类名访问。
- 静态数据成员的初始化需要使用类名在类外部初始化。
- 静态成员函数中没有this指针。
- 静态数据成员不依赖对象生命周期。
#include <iostream>
using namespace std;
class test{
private:static string name;
public:static int age;static int addAge(){age++;return age;}string changeName(){name = name+"123";return name;}
};
int test::age = 20;
string test::name = "wuchw";
int main()
{cout<<"test::age "<<test::age<<endl;cout<<"test::assAge() "<<test::addAge()<<endl;test tt;cout<<"tt.addAge() "<<tt.addAge()<<endl;cout<<"tt.changeName() "<<tt.changeName()<<endl;return 0;
}
- static方法不能是virtual,因为static方法是说所有对象共享这个方法,但是virtual是实现多态用的,所以两个是矛盾的,不能同时使用两个关键字,比如下面的代码会出错:
- 可以在子类中重写父类中的静态方法,下面将父类中的virtual关键字去掉就可以。
#include <iostream>
using namespace std;
class test{
private:static string name;int myint;
public:static int age;virtual static int addAge()//不能同时为virtual和static{age++;//myint++;//这里编译会出错return age;}string changeName(){name = name+"123";return name;}
};
class myChild:test{static int addAge(){age--;return age;}
};
int test::age = 20;
string test::name = "wuchw";
int main()
{cout<<"test::age "<<test::age<<endl;cout<<"test::assAge() "<<test::addAge()<<endl;test tt;cout<<"tt.addAge() "<<tt.addAge()<<endl;cout<<"tt.changeName() "<<tt.changeName()<<endl;return 0;
}