关于C++/JAVA类中的static成员和对象成员的说法正确的是:

来源:互联网 发布:托拜厄斯哈里斯数据 编辑:程序博客网 时间:2024/05/17 05:07

A:static成员变量在对象构造时候生成

B: static成员函数在对象成员函数中无法调用

C: 虚成员函数不可能是static成员函数

D: static成员函数不能访问static成员变量

答案:c   解释,(1)类的static成员变量属于该抽象类,需要在类定义时初始化,不可以在对象的构造函数中初始化。(2) static成员函数在对象成员函数中可以调用,同属于一个类作用域 (3)正确,static成员函数不可以声明为const和virtual,详见C++ primer  (4)static成员函数只能够访问static 成员变量。

答案c在标准中的解释:


ISO/IEC 14882:2003(E)  ISO/IEC
10.3 Virtual functions 

7 [Note: the virtual specifier implies membership, so a virtual function cannot be a nonmember (7.1.2)function.  Nor can a virtual function be a static member, since a virtual function call relies on a specific object for determining which function to invoke.  A virtual function declared in one class can be declared a friendin another class.  ]




#include "stdafx.h"
#ifndef TEST_H
#define TEST_H
#include <stdio.h>
class test
{
private:
int submember;
static int  member;
public:
static void writesubtest(int member)
{
//test::submember = member; //error:非静态成员引用必须与特定对象相对


}


virtual static void writetest(int member) //error:仅非静态成员函数可以是虚拟的
{
test::member = member;


}
static void display(int count)//static成员函数,属于抽象类,不属于类对象
{
printf("the count number is %d \n",count);
}
void readtest(int mem)  //对象成员函数
{
printf("helllo %d \n",test::submember);
// test::writetest(mem);// static成员函数在对象成员函数中可以调用,同属于一个类作用域,但是,static函数不能包含对stati成员的操作,否则出现错误
display(8);
}
};
#endif
int _tmain(int argc, _TCHAR* argv[])
{

int aa = 2;
test a ;
a.writetest(10);
a.readtest(aa);
return 0;
}

0 0