假设有以下类A,下面程序片段,哪个是正确的? class A{ int func2(int a){return a*a*a;} int c; public: int b; int func1(int a){return a*a;} }; A. A a; a.b=12; a.func1(5); B. A a; a.c=12; C. A a; a.func2(12); D. A a; a::func1(5);
时间: 2024-03-13 16:45:36 浏览: 173
选项A是正确的。
正确的代码应该是:
```cpp
A a;
a.b = 12;
a.func1(5);
```
选项A中,先定义了一个类A的对象a,然后给对象a的公有成员变量b赋值为12,最后调用对象a的公有成员函数func1,传入参数5,得到返回值25。
选项B中,A类中没有公有成员变量c,因此编译会报错。
选项C中,访问类A中的非公有成员函数func2会导致编译错误。
选项D中,func1是一个非静态成员函数,不能使用域操作符::来调用。正确的调用方式是通过对象来调用,如选项A所示。
相关问题
以下定义C++类的代码没有问题 class A{ int func2(int a) int c; public: int b; int func1(int a){return a*a;} }; A::func2(int a) { return a*a*a; }
这个代码有一些问题。首先,func2的定义应该在public或private关键字后面,否则编译器会报错。其次,func2的返回类型应该是int类型,否则也会报错。最后,func2的定义应该在类的外部,否则也会报错。以下是修正后的代码:
```c++
class A{
int c;
public:
int b;
int func1(int a){return a*a;}
int func2(int a);
};
int A::func2(int a) {
return a*a*a;
}
```
为什么下面的程序会出现错误?#include <iostream> #include <string> using namespace std; class A { int a; public: virtual void func() = 0; }; class B: public A { public: void func(){ cout<<"Class B"<<endl; } }; int main(int argc, char const *argv[]) { A a; a.func(); return 0; }
这段代码会出现错误,因为在main函数中创建了一个抽象类A的对象a,而抽象类是不能被实例化的。
抽象类中有一个或多个纯虚函数,这些函数没有实现,只是做了函数的声明。抽象类不能被实例化,只能作为基类,由其派生出子类,子类必须实现基类中的纯虚函数。
在这段代码中,类A是一个抽象类,它包含一个纯虚函数func,而类B是类A的子类,实现了func函数。在main函数中,创建了一个类A的对象a,但是由于类A是抽象类,无法被实例化,因此会导致编译错误。
正确的做法是创建类B的对象,然后调用其func函数,如下所示:
```
int main(int argc, char const *argv[]) {
B b;
b.func();
return 0;
}
```
阅读全文