首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中static成员函数的有关问题

2012-02-12 
C++中static成员函数的问题//usingnamespacestd#include iostream.h#include stdio.hclassT{private:

C++中static成员函数的问题
//using   namespace   std;
#include <iostream.h>
#include <stdio.h>

class   T{

private:
      char   name[20];
      int   age;
      int   Balance;

      //static   int   code;
public:
T(){
            cout < < "the   private   structure   can   be   visited " < <endl;    
     
      }
public:
static   int   code;
int   CheckBablance()   const;

int   getCode(){
   
return   code;
}

       
static   T*   visit(){
    return(new   T);
}
static   void   display(){
    cout < < "the   static   function   be   visited\n ";
}


};

int   T::code=2004;  
//T::   int   code=2004;     //error

int   T::CheckBablance()   const
{
    if((Balance==100)||(Balance <100))
    cout < < "你卡上的余额已近不足,请尽快冲值! " < <endl;
    return   Balance;
}


void   main(){
   
    char   c1;
   
    T*   vis=T::visit();
    cout < < "the   value   of   static   member   is   " < <vis-> getCode() < <endl;
    (*vis).CheckBablance();
    T::display();
    delete   vis;
   
    cout < < "=========================================   " < <endl;
   
    T   t1;
    cout < < "the   value   of   static   member   is   " < <t1.getCode() < <endl;
    t1.CheckBablance();
    printf( "*******************TO   END*******************\n ");
    scanf( "%c ",&c1);

 
}


/*问题:1,   首先通过在class   T中定义了一个static成员函数生成class   T的指针,即   T*   vis
                      我们知道,只有在创建对象的时候,系统才会分内存并且调用构造函数。但是,现在在没有创建任何对象的前提下,怎么会调用class   T的构造函数?


                2,   命名空间using   namespace   std的作用是什么?
                      为什么加上这句话后总是出错?
    error   C2871:   'std '   :   does   not   exist   or   is   not   a   namespace


                Thanks   for   your   help!

*/


[解决办法]
静态成员函数是编译时就构造了,他不属于对象,而是属于类的,所以不随创建对象而创建,就想全局变量和景泰变量类似,编译时就构造了
命名空间是为了避免重复使用标识符 如果你要是USING NAMESPACE STD不报错 可以用C++的头文件 INCLUDE <IOSTREAM> 不要加.H 因为那是C语言格式的 在C语言中没用到STD 所以你要是用C格式的头文件加上STD声明当然就错了

[解决办法]
要么用C++用法
#include <iostream>
using namespace std;
要么就用C语言用法
#include <iostream.h>


不可以混用的。

楼上已经把另一个问题说得很清楚了。静态成员变量与静态成员函数是不属于对象的,它在程序编译时就已经构造,因此在没有建立任何对象的情况下也可以直接用“类名::函数名(变量名)”就可以正确访问。
[解决办法]
iostream.h的形式是C++98之前的库头文件名,是C库的文件名,那时候还没有加入名字空间(namespace)的概念。如LZ用DEV C++编译的话没有问题。

另外一个问题上面也已经解决了


[解决办法]
1,new T 这里就在堆上分配内存,并且调用T的构造函数生成对象.
2. iostream.h是c标准库里头的文件,这里的代码是全局的.而iostream是C++标准库的,这里的代码放在命名空间std中.

热点排行