下列c++代码的输出是什么
#include <iostream>
#include <string>
using namespace std;
class A
{
int a = 5;
public:
void change(int i){
a = i;
}
static void value_of_a(){
cout<<a;
}
};
int main(int argc, char const *argv[])
{
A a1 = A();
a1.change(10);
a1.value_of_a();
return 0;
}
代码尝试在一个静态成员函数中访问一个非静态成员变量a
。在C++中,静态成员函数不属于类的任何特定对象实例,因此它们没有访问非静态成员变量的能力,因为非静态成员变量是与特定对象实例相关联的。
因此,尝试在value_of_a
静态函数中使用a
会导致编译错误,因为a
是一个非静态成员变量,而静态成员函数不能访问非静态成员变量。
正确答案是:
C. 编译错误
下列c++代码的输出是什么:
#include <iostream>
#include <string>
using namespace std;
class A
{
static int a;
public:
void change(int i){
a = i;
}
void value_of_a(){
cout<<a;
}
};
int A::a = 5;
int main(int argc, char const *argv[])
{
A a1 = A();
A a2 = A();
A a3 = A();
a1.change(10);
a1.value_of_a();
a2.value_of_a();
a3.value_of_a();
return 0;
}
在你提供的C++代码中,类A
定义了一个静态成员变量a
,并在类外初始化为5。类内提供了两个成员函数:change(int i)
用于修改静态成员变量a
的值,和value_of_a()
用于打印静态成员变量a
的值。
静态成员变量在类的所有实例之间共享。因此,当a1.change(10);
被调用时,它将静态成员变量a
的值改为10。随后,无论是通过哪个实例调用value_of_a()
,打印的都是静态成员变量a
当前的值,即10。
由于a1
, a2
, a3
依次调用了value_of_a()
,且在之前a1.change(10);
已将a
的值改为10,因此每次调用value_of_a()
都将打印出10,输出是连续三次10:
C. 101010
下列c++代码的输出是什么
#include<iostream>
using namespace std;
class Test
{
private:
int x;
int y;
public:
Test(int x = 0, int y = 0) { this->x = x; this->y = y; }
static void fun1() { cout << "Inside fun1()"; }
static void fun2() { cout << "Inside fun2()"; this->fun1(); }
};
int main()
{
Test obj;
obj.fun2();
return 0;
}
在提供的C++代码中,fun2()
是一个静态成员函数,它尝试使用 this
指针来调用另一个静态成员函数 fun1()
。然而,在C++中,静态成员函数不与类的任何特定对象相关联,因此它们没有 this
指针。尝试在静态成员函数内使用 this
指针是非法的,会导致编译错误。
因此,正确答案是:
D. 编译错误