以下对类A的定义中正确的是() A. class A{private:int v;public : void Func(){}} B. class A{private : int v;A *next;}; C. class A{int v;public:void Func();};A::void Func(){} D. class A{int v;public: A next;void Func(){ }};
时间: 2024-04-26 19:23:40 浏览: 271
选项A和C是正确的类A的定义。
选项A中,类A定义了一个私有成员变量v和一个公有成员函数Func(),其中Func()没有参数和返回值。这是一个合法的类定义。
选项B中,类A定义了一个私有成员变量v和一个私有成员指针变量next。由于next是私有的,无法直接访问,也无法被类外部使用。因此,这个定义是不正确的。
选项C中,类A定义了一个私有成员变量v和一个公有成员函数Func(),其中Func()没有参数和返回值。另外,类外部还定义了Func()的实现,实现中访问了类的私有成员变量v。这也是一个合法的类定义。
选项D中,类A定义了一个私有成员变量v和一个公有成员函数Func(),同时定义了一个公有成员变量next,类型为A。由于A的大小是未知的,所以定义A类型的变量作为类的成员变量是不合法的。因此,这个定义是不正确的。
因此,正确答案是A和C。
相关问题
针对以下程序,哪个选项会出现编译错误 class A { public: virtual void Print( ) = 0 ; private: int a; };
这段程序定义了一个抽象基类 A,其中包含一个纯虚函数 Print() 和一个私有成员变量 a。由于 Print() 是纯虚函数,A 类是抽象类,不能被直接实例化。
在这段程序中,a 是私有成员变量,只能在类的内部访问,不能被外部访问。这个类的设计并没有问题,不会出现编译错误。
但是,如果在类的内部定义一个使用 a 的函数,而该函数是公有函数,那么编译器会报错,因为私有成员变量只能在类的内部访问,外部无法访问。例如:
```c++
class A {
public:
virtual void Print() = 0;
void Func() { a = 10; } // 编译错误,a 是私有的
private:
int a;
};
```
这样的话,编译器会提示“error: ‘int A::a’ is private within this context”。
class Teacher { public: ... private: int num; string name; char sex; }; class BirthDate { public: ... private: int year; int month; int day; }; class Professor : public Teacher { public: ... private: BirthDate birthday; }; // 2 void fun1(Teacher &); void fun2(BirthDate &); fun1(prof1); fun2(prof1.birthday); fun2(prof1);oid func1(Teacher &); // 修改教授除生日外的信息,程序内给出 // 规定统一修改为: name = 张三, num = 10000, sex = m void func2(BirthDate &); // 修改教授的生日信息,即你传入的应该是prof1.birthday // 规定统一该项数据从键盘读取
这段程序中定义了三个类,分别为 `Teacher`、`BirthDate` 和 `Professor`。`Professor` 类继承自 `Teacher`,并包含一个 `BirthDate` 类型的对象 `birthday`。
以下是对程序中出现的函数进行补充:
```cpp
// 修改教授除生日外的信息
// 规定统一修改为: name = 张三, num = 10000, sex = m
void func1(Teacher &teacher) {
teacher.name = "张三";
teacher.num = 10000;
teacher.sex = 'm';
}
// 修改教授的生日信息
// 规定统一该项数据从键盘读取
void func2(BirthDate &birthDate) {
cout << "请输入出生年份:";
cin >> birthDate.year;
cout << "请输入出生月份:";
cin >> birthDate.month;
cout << "请输入出生日期:";
cin >> birthDate.day;
}
```
在 `func1` 函数中,修改了传入对象的 `name`、`num` 和 `sex` 三个成员变量的值。
在 `func2` 函数中,通过键盘输入修改了传入对象的 `year`、`month` 和 `day` 三个成员变量的值。
需要注意的是,在调用 `func2` 函数时,需要传入 `prof1.birthday` 对象,而不是 `prof1` 对象。
阅读全文