初学类与对象总结

类与对象初学总结

一:知识点总结:

1:在面向对象程序设计中,程序的基本单位是类。类是用户定义的数据和操作这些数据的函数的封装。

2c++中,类定义的说明语句一般形式:

Class <类名>

{public: 公有段数据成员和成员函数;

Protected:保护段数据成员和成员函数;

Private:私有制数据成员和成员函数;

};(“;”一定不要忘记)

3private 用于声明私有成员,私有成员只能在类中可见,不能再类外使用。(如果私有成员放在第一段,通常省略 private

4public 声明公有成员,公有成员是类的接口,类内类外都可见。

5:返回函数     类名::函数名(参数表)  (作用域区分符由两个冒号构成,用于标识属于什么类的成员)

6:成员函数有两个作用:一  操作数据成员,包括访问和修改数据成员。  二 协同不同的对象操作,传递消息。

7:访问对象成员时一般用.->”访问对象成员。(->  用于指针访问对象)

8c++中为成员函数提供了this的隐含指针参数,对象的地址被传递给this指针,this指针指向该对象。this函数不能显式说明,但可以在成员函数中显式使用。

9:构造函数与类名相同,构造函数可以有任意类型的参数,但不能有返回类型。

析构函数在类名之前加一个~”,析构函数没有参数,也没有返回类型,析构函数在类对象作用域结束时自动调用。

构造函数  类名::类名(参数表);

析构函数   类名::~类名();
10:构造函数与普通函数一样,允许重载。如果Date类具有多个构造函数,创建函数时,将根据参数匹配调用其中的一个。

11:复制构造函数要求有一个类类型的引用参数:  类名::类名(const 类名&引用名,……);

12:内联函数
⑴内联函数作用减少频繁调用小子程序的运行的时间开销
⑵内联函数机制编译器在编译时,将内联函数的调用以相应代码代替。
⑶内联函数声明
     inline  函数原型
内联函数注意:
①内联函数仅在函数原型做一次声明。
②适用于只有1~5行的小函数。
③不能含有复杂结构控制语句,不能递归调用。
13:复制构造函数
语法形式:
类名::类名(conest 类名 & 引用名 ,…);
①:复制构造函数名与类名相同,并且也没有返回值类型。
②:复制构造函数可写在类中,也可以写在类外。
③:复制构造函数要求有一个类类型的引用参数。
④:如果没有显式引用复制构造函数,系统自动生成一个默认形式的复制构造函数。

14:浅复制:
①:在用一个对象初始化另一个对象时,只复制了数据成员,而没有复制资源,使两个对象同时指向了同一资源的复制方式称为浅复制。(即:对于复杂类型的数据成员只复制了存储地址而没有复制存储内容。
②:默认复制构造函数所进行的时简单数据复制,即浅复制。
15:深复制:
①:通过一个对象初始化另一个对象时,不仅复制了数据成员,也复制了资源的复制方式称为深复制。
②:自定义复制构造函数所进行的复制是复制。

16:常数据成员只读不写。

17:常数据成员可以在构造函数中直接用常量进行初始化。

18:静态成员函数在类外定义时不用static前缀。

19:静态成员函数主要用来访问同一类中的静态数据成员。

20:私有静态成员函数不能在类外部或用对象访问。

21:可以在建立对象之前处理静态数据成员。

22:编译系统将静态成员函数限定为内部连接(在其他文件中不可见)

23:静态成员函数中是没有this指针的。

24:静态成员函数不访问类中的非静态数据成员。如有需要,只能通过对象名(或指向对象的指针)访问该对象的非静态成员。

 

二:典型代码:

1:学生信息类:

#include<bits/stdc++.h>

#include<string>

using namespace std;

class student

{

    public://公有段

    student(int id,string na,int x,int y,int z)

    {

        name=na;//姓名

        no=id;//学号

        score[0]=x;//数学

        score[1]=y;//英语

        score[2]=z;//c++

        order=1;//名词

        average=(score[0]+score[1]+score[2])/3;//平均分

 

    }

    student()//无参函数

    {

        score[0]=score[1]=score[2]=0;

        order=1;

        average=0;

    }

    int getNo() {return no;}

    int getAverage() {return average;}

    int setAverage(int avg) {average=avg;}

    int getOrder() {return order;}

    int setOrder(int x) {order=x;}

    string getName()  {return name;}

    string setName(string na) {return name=na;}

    void display();

 

 

    private://私有段

    int no;

    string name;

    int score[3];

    float average;

    int order;

 

};

void student::display()//显示

{

    cout<<name<<"\t"<<no<<"\t"<<score[0]<<"\t"<<score[1]<<"\t"<<score[2]<<"\t"<<average<<"\t\t"<<order<<endl;

}

int main()

{

    student s(20171819,"long",66,77,88);

    s.setName("tian");//换名字为“tian”

    s.getName();

    s.getAverage();

    s.getOrder();

    s.display();

    return 0;

}

2:操作类:

#include<iostream>

#include<string>

#include<algorithm>

using namespace std;

class student

{

    private:

    string name;

    int no;

    int score[3];

    float average;

    int order;

    public :

    student (int id,string na,int x,int y,int z)//:

    //name(na),no(id)

    {

        name=na;no=id;

        score[0]=x,score[1]=y,score[2]=z;

        order=1,average=(score[0]+score[1]+score[2])/3;

    }

    student()

    {

        score[0]=score[1]=score[2]=0;

        order=1,average=0;

    }

    int getNo(){return no;}

    int getAverage() {return average;}

    void setAverage(int avg) {average=avg;}

    void setOrder (int x) {order=x;}

    int getOrder() {return average;}

    string getName() {return name;}

    void setName(string name){this->name=name;}

    void display();

};

void student::display()

{

    cout<<name<<"\t"<<no<<"\t"<<score[0]<<"\t"<<score[1]<<"\t"<<score[2]<<"\t"<<average<<"\t\t"<<order<<endl;

}

bool cmp1(student stu1,student stu2)

{

    if (stu1.getAverage()-stu2.getAverage()>=1e-9)return 1;

    else return 0;

}

bool cmp2(student stu1,student stu2)

{

    return stu1.getNo()<stu2.getNo();

}

class student_list

{

    student list[60];

    int n;

    public :

    student_list():n(0){};

    void add();

    void deleteStu();

    void query();

    void change();

    void display(int flge);

    void menu();

    int search(int no);

    void sortList();

};

void student_list::add()

{

    int no,x,y,z;

    string name;

    system("cls");

    cout<<"按学号,姓名,数学,英语,c++顺序输入学生信息,学号输-1表示结束"<<endl;

    while ((cin>>no)&&no!=-1)

    {

        cin>>name>>x>>y>>z;

        student s(no ,name ,x,y,z);

        list[n++]=s;

        sortList();

    }

}

void student_list::sortList(){

sort(list,list+n,cmp1);

int i;

for (int i=0;i<n;i++)

list[i].setOrder(i+1);

}

void student_list::display(int flag)

{

    if (flag) sort(list,list+n,cmp2);

    else

    sort(list,list+n,cmp1);

    cout<<"姓名"<<"\t"<<"学号"<<"\t"<<"数学"<<"\t"<<"英语"<<"\t"<<"c++"<<"\t"<<"平均成绩"<<"\t"<<"名次"<<endl;

    for (int i=0;i<n;i++)

    list[i].display();

}

int student_list::search(int no)

{

    int i;

    for (i=0;i<n;i++)

    if (list[i].getNo()==no)

    return i;

    return -1;

}

void student_list::query()

{

    int no,i;

    system("cls");

    cout<<"请输入要查询同学的学号,按-1结束查询";

    while(cin>>no&&no!=-1)

    {

        i=search(no);

        if (i!=-1)

        {cout<<"姓名"<<"\t"<<"学号"<<"\t"<<"数学"<<"\t"<<"英语"<<"\t"<<"c++"<<"\t"<<"平均成绩"<<"\t"<<"名次"<<endl;

        list[i].display();

        cout<<"请输入要查询同学的学号,按-1结束查询:";}

        else

        cout<<"学号输入有误,请重输,输入-1结束查询"<<endl;

    }

}

void student_list::change()

{

 

}

void student_list::deleteStu()

{

 

}

int main()

{

    student s(1,"ff",66,77,88);

    s.display();

    cout<<s.getAverage()<<endl;

    s.setName("方法");

    s.display();

    student_list c;

    c.add();

    c.display(1);

    c.query();

    c.display(0);

    return 0;

 

}

三:学习心得:

通过初步学习类与对象可以让我学会简单的系统编程。通过简单的运用一些小程序时整个系统更加完善,完成更多的操作,同时通过学习类的操作可以做一些简单的系统,是c++学习中的一个过度阶段,也希望在以后的学习中能更清楚的掌握好类的知识,争取做出更加优秀的系统。

 

 

猜你喜欢

转载自blog.csdn.net/sdau_20171819/article/details/80071286