例题如下:
#include<iostream>
#include<cstring>
using namespace std;
class studentID{
long value;
public:
studentID(long id=0){
value=id;
cout<<"赋给学生的学号:"<<value<<endl;
}
~studentID(){
cout<<"删除学号:"<<value<<endl;
}
};
class student{
private:
studentID id;
char name[20];
public:
student::student (char sname[]=“no name”,long sid=0 ):id(sid){
cout<<"学生名:"<<sname<<endl;
strcpy(name,sname);
}
~student(){
cout<<"删除学生名:"<<name<<endl;
}
};
int main(){
student ss;
return 0;
}
问题一:为什么在student类中的构造函数student (char sname[]=“no name”,long sid=0 )是这样初始化的sname[]的?为什么不能是char sname[0]="" ?是有什么意义吗?
问题二:为什么调试程序时发现程序走到student::student (char sname[]=“no name”,long sid=0 ):id(sid){ 这一行后跳到了class studentID类中的构造函数上?这个运行原理是啥?我有点不明白。。
求大神帮忙,小弟十分感激!
一:我用char sname[0]="" 为什么也能编译成功?sname[0]应该只能表示单个字符啊。
二:可能我没说清楚,我知道这俩都是默认的构造函数。但是为什么student::student (char sname[]=“no name”,long sid=0 ):id(sid){ 跳过去,它是因为这一行的哪个符号跳过去的?
我觉得可能和studentID id;有关,对于class student 来说,studentID id应该是属于其他类的一个对象吧?能详细讲一下吗
一:我用char sname[0]="" 为什么也能编译成功?sname[0]应该只能表示单个字符啊。二:可能我没说清楚,我知道这俩都是默认的构造函数。但是为什么student::student (char sname[]=“no name”,long sid=0 ):id(sid){ 跳过去,它是因为这一行的哪个符号跳过去的?
追答答1:
额~~忘了~~
作为函数的参数char s[]; //[]当中无论填写多少数字都无法起作用的,参数只是起到说明类型的作用
所以你的 char sname[0] 就相当于char sname[],也就是char *sname;
答二:
是因为class student类中的studentID id;//创建了studentID 类对象,所以调用studentID 的构造函数