void disp()和void disp() const 有什么区别
时间: 2024-04-01 11:34:58 浏览: 17
在C++中,const是一个常见的关键字,用于修饰成员函数。在一个成员函数后面加上const表示这个函数是一个常量成员函数,也就是说,在这个函数中不能修改类的非静态数据成员。
在这种情况下,void disp()和void disp() const之间的区别在于前者是一个普通成员函数,它可以修改类的非静态数据成员,而后者是一个常量成员函数,它不能修改类的非静态数据成员。
例如,如果有一个类A,它有一个非静态数据成员m,如果声明了一个常量成员函数void disp() const,在这个函数中不能修改m的值,但是如果声明了一个普通成员函数void disp(),则可以在这个函数中修改m的值。
相关问题
#include<iostream> using namespace std; class Sample{ public: Sample(int i, int j) {x=i; y=j; } void disp() {cout<<"disp1"<<endl; } void disp() const } private: int x, y; }; int main() {const Sample a(1, 2); a. disp(); return 0; }
这段代码有一些语法错误。首先,在`void disp() const`之后应该有一个分号;其次,在`void disp() const`函数体内应该输出`disp2`而不是`disp1`,因为`const`成员函数不能修改对象的成员变量,所以不能调用非`const`的`disp()`函数。
以下是修改后的代码:
```c++
#include<iostream>
using namespace std;
class Sample {
public:
Sample(int i, int j) { x = i; y = j; }
void disp() { cout << "disp1" << endl; }
void disp() const { cout << "disp2" << endl; }
private:
int x, y;
};
int main() {
const Sample a(1, 2);
a.disp();
return 0;
}
```
输出结果为:
```
disp2
```
本关任务:编写一个输出学生和教师数据的程序,学生数据有编号、姓名、年龄、班号和成绩;教师数据有编号、姓名、年龄、职称和部门。要求声明一个person类,并作为学生数据操作类student和教师数据操作类teacher的基类。 (1)定义Person类 int number1,age; //编号、年龄 char name[10];//姓名 Person() ://默认构造函数 Person(int i,int j,const char*p) : //带参构造函数 void disp()://数据输出 (2)定义Student类 int lesson; //班号 char grade; //成绩 Student(int i,int j,const char*p, int k,char a) : //构造函数 void disp(): //数据输出 (3)定义Teacher类 char job[10],workplace[30]; // 职称、部门 Teacher(int i,int j,charp,const chara,const char*b) ://构造函数 void disp() ://数据输出
好的,根据您的要求,以下是一个简单的程序示例,以C++语言为例:
```c++
#include <iostream>
#include <string.h>
using namespace std;
class Person { // Person类为基类,包含编号、姓名、年龄等属性
public:
int number1;
int age;
char name[10];
Person() {} // 默认构造函数
Person(int i, int j, const char *p) { // 带参构造函数
number1 = i;
age = j;
strcpy(name, p);
}
virtual void disp() { // 数据输出
cout << "编号:" << number1 << endl;
cout << "姓名:" << name << endl;
cout << "年龄:" << age << endl;
}
};
class Student : public Person { // Student类继承自Person类,增加班号和成绩属性
public:
int lesson;
char grade;
Student(int i, int j, const char *p, int k, char a) : Person(i, j, p) { // 构造函数
lesson = k;
grade = a;
}
virtual void disp() { // 数据输出
cout << "学生信息:" << endl;
Person::disp();
cout << "班号:" << lesson << endl;
cout << "成绩:" << grade << endl;
}
};
class Teacher : public Person { // Teacher类继承自Person类,增加职称和部门属性
public:
char job[10];
char workplace[30];
Teacher(int i, int j, const char *p, const char *a, const char *b) : Person(i, j, p) { // 构造函数
strcpy(job, a);
strcpy(workplace, b);
}
virtual void disp() { // 数据输出
cout << "教师信息:" << endl;
Person::disp();
cout << "职称:" << job << endl;
cout << "部门:" << workplace << endl;
}
};
int main() {
Person *p[3];
p[0] = new Student(1, 18, "张三", 1, 'A');
p[1] = new Teacher(1001, 35, "李老师", "教授", "计算机科学与技术");
p[2] = new Student(2, 19, "李四", 2, 'B');
for (int i = 0; i < 3; i++) {
p[i]->disp();
cout << endl;
}
return 0;
}
```
这个程序定义了一个Person类,作为学生数据操作类Student和教师数据操作类Teacher的基类。其中,Student类和Teacher类都继承自Person类,并增加了各自特有的属性。在主函数中,我们创建了三个指向Person类对象的指针,分别指向一个Student对象、一个Teacher对象和另一个Student对象。通过指针调用disp()方法输出各自的属性信息。
需要注意的是,我们在Person类中将disp()方法声明为虚函数,这是因为在多态的情况下,通过指向基类对象的指针调用虚函数可以实现动态绑定,从而调用正确的派生类中的函数。
希望这个程序可以帮助您完成本关任务。如果您有任何问题,欢迎随时问我。