结构体、类和对象

一、 结构体 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

structclass
默认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函数
}

注意事项:

  1. 成员函数必须先在类体里做原型声明
  2. 成员函数可以访问本类中的任何成员(包括私有/公有)
  3. 需要被外界调用的设置成public
  4. 不同的类可以有同名函数,当在类外定义时,需要如上写::(作用域限定符)。如果没有::,或者::前面没有类名,默认它不属于任何类,是全局函数(普通函数)
  5. 成员函数里访问类的变量,成员函数里不用t.name这种,而是调用的时候用t.display()
  6. 而如果是一个普通的函数,想访问类的公有变量,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章

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值