graduate(const char* num, const char* i, const char* s, date birth, const char* sub) : student(num, i, s, birth), People(num, i, s, birth), subject(sub) {}TA类的构造函数如何继承上面几个类的所有成员
时间: 2024-03-19 13:43:08 浏览: 52
TA类的构造函数应该先调用其父类的构造函数,以继承其所有成员,然后再初始化TA类特有的成员。具体实现如下:
```c++
class TA : public student {
public:
// TA类构造函数,继承student和People的所有成员
TA(const char* num, const char* i, const char* s, date birth, const char* sub)
: student(num, i, s, birth), People(num, i, s, birth), subject(sub) {}
private:
const char* subject; // TA类特有的成员
};
```
在上面的构造函数中,首先调用了student和People的构造函数,以继承这两个类的所有成员。然后再初始化TA类特有的成员,即subject。这样,TA类就可以继承其父类的所有成员了。
相关问题
如果字符串列表是下面的定义呢const char **keys = (const char **)malloc(num_keys * sizeof(const char *)); // 分配存储键名的字符串数组
如果字符串列表是这样定义的:
```c
const char **keys = (const char **)malloc(num_keys * sizeof(const char *));
```
则可以将自定义比较函数稍作修改,示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 自定义比较函数
int cmp(const void *a, const void *b) {
return strcmp(*(const char**)a, *(const char**)b);
}
int main() {
const char **keys = (const char **)malloc(num_keys * sizeof(const char *));
// 假设已经给keys数组赋值
int n = num_keys;
qsort(keys, n, sizeof(const char*), cmp);
for (int i = 0; i < n; i++) {
printf("%s ", keys[i]);
}
printf("\n");
free(keys); // 释放内存
return 0;
}
```
需要注意的是,由于keys数组是常量指针数组,因此在定义比较函数时需要使用const关键字。另外,在使用完malloc分配内存后,需要在程序结束前使用free函数释放内存。
const char* num[ ] 和const char num[ ]的区别
const char* num[] 和 const char num[] 的区别在于数据类型和内存分配方式。
const char* num[] 是一个指针数组,其中每个元素都是指向 char 类型数据的指针。这意味着 num[] 中的每个元素可以指向不同的 char 数组。
而 const char num[] 是一个字符数组,其中每个元素都是 char 类型。这意味着 num[] 中的每个元素都是字符。
在内存分配方面,const char* num[] 中的指针数组需要额外的内存来存储指针值和指向的 char 数组。而 const char num[] 中的字符数组直接存储在连续的内存位置中。
因此,const char* num[] 具有更大的灵活性,可以指向不同长度的字符串,而 const char num[] 存储的字符串长度是固定的。
阅读全文