🔺🔺关于字符串与构造函数的几个重点
1.1每一个常量都有一个本质的特定的类型(想一想形参和实参对应的情况),而字符串常量的类型是什么呢?其实是char *类型!
1.2而如果要把一个具体数组中的内容作为实参进行传递,则其类型(形参)为“指针+长度”。
1.3注意,结构体或类属于“(自定义)基本类型”,不属于字符串或数组的“集合类型”,故其类型(形参)不是指针!且可以像“普通基本类型”一样直接使用赋值号“=”。
1.4一个基本类型内部的存储空间划分必须是确定的,故可以使用“=”号。而对于数组来说,其本身连长度都是变化的,不确定的,故不是基本类型,也就不能直接使用“=”。
2.1类的构造函数是类中最特殊的一个成员函数。因为对于其他成员函数,都可以使用“对象.函数”的形式调用,而构造函数不行。
2.2构造函数的实质是构造一个该类的常量。如下3例可佐证:(以Student为类名,构造函数为Student(int n))
例1:“Student stu; stu=Student(1);” 或 “Student stu=Student(1)" (但注意,第一种写法实际上先是调用了一次默认构造函数,再调用了一次显式的构造函数!)完成对象的初始化。
例2:Student s[3]={Student(1),Student(2),Student(3)};完成数组的初始化。
例3:特殊地,在动态内存分配时,初始化格式时是唯一的,如: Student *ptr=new Student(5); 而不能分开写作:Student *ptr=new Student; *ptr=Student(5)。其原因不在"*ptr=Student(5)"这句话,而在于第一句话中,使用动态内存分配时系统不会自动调用默认构造函数,故若此时不显式调用构造函数,则该新建对象就不是个具体的对象,编译会出错。(但如果显式的构造函数是Student()这样的无参函数,那么第一句话就没有错误)。
3."ptr->"这个形式就是为结构体(类)量身定制的!
4.注意,一个类(假设成员数据均为非公有)不能操作的是其内部的各成员数据,而其作为一个整体是可以进行赋值操作的(可作为左值或右值)。
浙公网安备 33010602011771号