因为函数在程序运行中被调用,所以静态数据成员不能在任何函数内分配空间和初始化。 这样,它的空间分配有三个可能的地方,一是作为类的外部接口的头文件,那里有类声明;二是类定义的内部实现,那里有类的成员函数定义;三是应用程序的main()函数前的全局数据声明和定义处。 静态数据成员要实际地分配空间,故不能在类的...
1. 将非静态方法变为静态方法 这是一种比较容易实现的方法。如果你的非静态方法没有使用任何属于对象的...
};int A::ac=1; //类外定义且初始化,//类的静态成员变量需要在类外分配内存空间intA::dc=1;intA::stval(){// nn=10; 静态成员函数不能调用非静态成员dc=20;returndc; }intA::val() { dc=ac; //成员函数直接访问returndc; }intmain() { A a;cout<<a.ac; //使用类的对象访问cout<<a.val...
在C++中,静态函数是属于类或者说是属于命名空间的,而非静态函数则是属于类的实例。因此,直接从静态函数中调用非静态函数是不被允许的,因为非静态函数需要一个类的实例才能被调用。 如果需要从静态函数中调用非静态函数,可以通过创建一个类的实例,然后通过该实例来调用非静态函数。例如: ...
intnum;//普通成员变量 staticintdata;//静态成员变量(类内声明) public: //普通成员函数 依赖于 对象的 必须对象调用 intgetData(void) { returndata; } }; //定义的时候 不需要加static intData::data=100;//类外定义+初始化 intmain() {
而静态成员函数调用的成员变量值都必须是静态的,等同全局的变量。一个类不同的对象实例的静态变量是同一个变量,所以静态成员函数的调用可以全局调用,而无须指明是对哪一个对象操作。 静态成员(类中用static声明)用类名::成员名的方式访问,非静态成员必须通过定义的类对象来访问。
“class::function”:非静态成员函数的非法调用 static成员函数调用了非静态成员函数。 或者,从类外部将非静态成员函数作为静态函数进行了调用。 下面的示例生成 C2352,并演示如何修复此错误: C++ // C2352.cpp// compile with: /cclassCMyClass{public:staticvoidfunc1();voidfunc2();staticvoidfunc3(){ ...
对非静态成员“Student::m_age”的非法引用//m_age = 10;cout<<'静态成员函数被调用 : number = '<<number<<endl;}public:intm_age;// 年龄intm_height;// 身高// 在类内部定义静态成员staticintnumber;};// 在类外部初始化静态成员变量intStudent::number=1;intmain(){// I. 静态成员变量// 使...
静态成员的定义或声明要加个关键 static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>。 3.2 静态类相关 通过类名调用静态成员函数和非静态成员函数: classPoint{public:voidinit(){}staticvoidoutput(){}};voidmain(){Point::init();Point::output();} ...
//而非静态成员函数和非静态成员属于对象的方法和数据,也就是应该先产生类的对象,然后通过类的对象去引用。 修改1.1: class Point { public: void output() {} static void init() {x=0;y=0;} private: int x,y; } void main() { Point::init();//错误:在静态成员函数中不能调用非静态成员 ...