一、 结构体 struct
struct Student{
char name[20];
float score;
}stu1,stu2;//定义结构体变量
定义结构体变量也可以
Student stu1,stu2;
结构体数组
如上,若一个班有十个学生,那么应该用数组表示这十个学生
//以三个学生为例
Student stu[3]={"Tom",0,"Alice",60.1,"BBing",82.3};
结构体指针
1
Student stu;
Student *p=&stu;
p->num 其实就是 (*p).num
new开辟存储空间
int main()
{
Student *p;
p=new Student;
p->name="BBing";//实际这么赋值会报错
p->score=82.3;
}
2链表
struct Student{
char name[20];
float score;
struct Student *next;
};
int main(){
Student a,b,c,*head,*p;
a.name="Tom";//报错
a.score=0;
a.next=&b;
之后用while(p!=NULL) p=p->next;遍历
}
类中字符串char name[20]赋值报错问题解决方案
1.书中这种赋值可以
2.参考字符串赋值问题解决方案
类中使用string name;就可以a.name=“Tom”;直接这么赋值了
或者用char数组的话,写strcpy(a.name,“Tom”);
二、类 class
struct | class |
---|---|
默认public | 默认private |
里面不能定义函数 | 可以定义函数 |
class Student{
public:
void display();//成员函数必须先在类体里做原型声明
char name[20];
private:
float score;
};
void Student::display(){//在类外定义Student类的成员函数
cout<<"姓名:"<<name;
}
int main(){
Student stu;
cin>>stu.name;//也可以写一个他的成员函数,并且成员函数才能对score赋值
stu.display();//逻辑上就是调用stu的dispaly函数
}
注意事项:
- 成员函数必须先在类体里做原型声明
- 成员函数可以访问本类中的任何成员(包括私有/公有)
- 需要被外界调用的设置成public
- 不同的类可以有同名函数,当在类外定义时,需要如上写::(作用域限定符)。如果没有::,或者::前面没有类名,默认它不属于任何类,是全局函数(普通函数)
成员函数里访问类的变量,成员函数里不用t.name这种,而是调用的时候用t.display()
而如果是一个普通的函数,想访问类的公有变量,display(Student&t),display函数里面写t.什么什么
例题
2013考试题
/*类Person是一个描述人员信息的数据结构体,包括姓名(不定长)、性别、年龄。
利用该结构体创建数组emp[5],
调用自身的Get()方法可以输入人员的信息,并通过Show()方法显示输入的信息。*/
#include <iostream>
#include <string>
using namespace std;
class Person{
private:
char name[20];
bool sex;//0女,1男
int age;
public:
void Get();
void Show();
};
void Person::Get(){
cout<<"请输入人员姓名:";
cin>>name;
cout<<"请输入性别(0女,1男):";
cin>>sex;
cout<<"请输入年龄:";
cin>>age;
}
void Person::Show(){
cout<<"姓名:"<<name;
cout<<",性别(0女,1男):"<<sex;
cout<<",年龄:"<<age;
cout<<endl;
}
int main(){
Person emp[3];
for(int i=0;i<3;i++)
emp[i].Get();
for(int i=0;i<3;i++)
emp[i].Show();
}
要是不要求在类里定义函数,在main()里如下写也行
int main(){
Student stu;
void display(Student&);//声明
void set(Student&,char name[],float score);
display(stu);
}
void display(Student&t){
cout<<t.name<<"的成绩是:"<<t.score;
}
以上是大红书7、8章