c++链表类对象的知识与应用0816

来源:互联网 发布:js复选框全选取消全选 编辑:程序博客网 时间:2024/06/14 23:31

代码是程序员的朋友,虽然没有热情,但是非常忠实。

上午的主要内容内容讲到了链表的知识,对于链表其实就是一个循环,从头到末尾,你可以对其中的数据进行增删该查,下面用代码来说明一切。
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构
是不是还是很懵,那就对了,对于这个链表表面上不是很好理解,但是用代码来表示还是很好理解,感谢唐哥用这么这么简单明了的方法。

//#include <stdio.h>//#include<stdio.h>//struct MyStruct//{//  int num;//  struct MyStruct *next;//};//void main(){//  struct MyStruct n1, n2, n3, n4, n5;  //结构体的初始化//  struct MyStruct *head = NULL;     // 定义头指针的时候一定要记得赋值//  //  n1.num = 1;             //结构体元素赋值//  n2.num = 2;//  n3.num = 3;//  n4.num = 4;//  n5.num = 5;//  head = &n1;//  n1.next = &n2;//  n2.next = &n3;//  n3.next = &n4;//  n4.next = &n5;//  n5.next = NULL;//  printf("%d\n",head->num);//  printf("%d\n", head->next->num);//  printf("%d\n", head->next->next->num);//  printf("%d\n", head->next->next->next->num);//  printf("%d\n", head->next->next->next->next->num);//////  struct MyStruct n6;         //  增加数据//  n6.num = 6;//  n5.next = &n6;//  n6.next = NULL;//  printf("%d\n", head->next->next->next->next->next->num);////  struct MyStruct n7;         //  n7.num = 7;//  n3.next = &n7;//  n7.next = &n4;//n2.next = &n7;        ////删除3//  n3.next = NULL;//  while (head!=NULL)//  {//      printf("%d",head->num);//      head = head->next;//  }//////  system("pause");//////}

下午讲的东西还是比较抽象,就是经常说的类和对象,因为这个东西很抽象,所以子讲的的不是很好理解,
我就知道类首先1:属性 2 :行为
下面我百度一下官方的类和对象的概念。
这个还是应该好好数熟悉,只好借鉴人家所写的,不过我自己感觉写的还是很好的。

1.类和对象的定义

类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。

对象是具有类类型的变量。

折叠2.类和对象的关系

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。

折叠3.类类型的声明形式

class 类名

{

public:

公用的数据和成员函数

和成员函数

protected:

保护的数据和成员函数

private:

私有的数据

}

折叠4.定义对象的方法

1.先声明类类型,然后再定义对象

举例:Student stud1,stud2; //Student是已经声明的类类型

2.在声明类类型的同时定义对象

class Student

//声明类类型

{public :

//先声明公用部分

void display( )

{cout<<″num:″<

include

using namespace std;

class Time //定义Time类

{public : //数据成员为公用的

int hour;

int minute;

int sec;};

int main( )

{

Time t1;//定义t1为Time类对象

cin>>t1.hour;//输入设定的时间

cin>>t1.minute;

cin>>t1.sec;

//输出时间:

cout<

include

using namespace std;

class Time

{public :

int hour;

int minute;

int sec;

};

int main( )

{Time t1;//定义对象t1

cin>>t1.hour;//向t1的数据成员输入数据

cin>>t1.minute;

cin>>t1.sec;

cout<

include

using namespace std;

class Time

{public :

int hour;

int minute;

int sec;

};

int main( )

{

void set_time(Time&);//函数声明

void show_time(Time&);//函数声明

Time t1;//定义t1为Time类对象

set_time(t1);//调用set_time函数,向t1对象中的数据成员输入数据

show_time(t1);//调用show_time函数,输出t1对象中的数据

Time t2;//定义t2为Time类对象

set_time(t2);//调用set_time函数,向t2对象中的数据成员输入数据

show_time(t2);//调用show_time函数,输出t2对象中的数据

return 0;

}

void set_time(Time& t) //定义函数set_time,形参t是引用变量

{

cin>>t.hour;//输入设定的时间

cin>>t.minute;

cin>>t.sec;

}

void show_time(Time& t) //定义函数show_time,形参t是引用变量

{

cout<

include

using namespace std;

class Time

{public :

void set_time( );//公用成员函数

void show_time( );//公用成员函数

private : //数据成员为私有

int hour;

int minute;

int sec;

};

int main( )

{

Time t1;//定义对象t1

t1.set_time( );//调用对象t1的成员函数set_time,向t1的数据成员输入数据

t1.show_time( );//调用对象t1的成员函数show_time,输出t1的数据成员的值

Time t2;//定义对象t2

t2.set_time( );//调用对象t2的成员函数set_time,向t2的数据成员输入数据

t2.show_time( );//调用对象t2的成员函数show_time,输出t2的数据成员的值

return 0;

}

void Time∷set_time( ) //在类外定义set_time函数

{

cin>>hour;

cin>>minute;

cin>>sec;

}

void Time∷show_time( ) //在类外定义show_time函数

{

cout<< hour<<″:″<< minute<<″:″<< sec<< endl;

}

运行情况与例2中的程序(a)相同。

注意:

(1) 在主函数中调用两个成员函数时,应指明对象名(t1,t2)。表示调用的是哪一个对象的成员函数。

(2) 在类外定义函数时,应指明函数的作用域(如void Time∷set_time( ))。在成员函数引用本对象的数据成员时,只需直接写数据成员名,这时C++系统会把它默认为本对象的数据成员。也可以显式地写出类名并使用域运算符。

(3) 应注意区分什么场合用域运算符“∷”,什么场合用成员运算符“.”,不要搞混。

折叠例4

找出一个整型数组中的元素的最大值。这个问题可以不用类的方法来解决,现在用类来处理,读者可以比较不同方法的特点。

include

using namespace std;

class Array_max //声明类

{public : //以下3行为成员函数原型声明

void set_value( ); //对数组元素设置值

void max_value( ); //找出数组中的最大元素

void show_value( ); //输出最大值

private :

int array[10]; //整型数组

int max; //max用来存放最大值

};

void Array_max∷set_value( ) //成员函数定义,向数组元素输入数值

{ int i;

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

cin>> array;

}

void Array_max∷max_value( ) //成员函数定义,找数组元素中的最大值

{int i;

max=array[0];

for (i=1;i<10;i++)

if(array> max) max=array;

}

void Array_max∷show_value( ) //成员函数定义,输出最大值

{cout<< ″max=″<< max;}

int main( )

{Array_max arrmax; //定义对象arrmax

arrmax.set_value( ); //调用arrmax的set_value函数,向数组元素输入数值

arrmax.max_value( ); //调用arrmax的max_value函数,找出数组元素中的最大值

arrmax.show_value( ); //调用arrmax的show_value函数,输出数组元素中的最大值

return 0;

}

运行结果如下:

12 12 39 -34 17 134 045 -91 76↙ (输入10个元素的值)

max=134 (输入10个元素中的最大值)

请注意成员函数定义与调用成员函数的关系,定义成员函数只是设计了一组操作代码,并未实际执行,只有在被调用时才真正地执行这一组操作。

可以看出: 主函数很简单,语句很少,只是调用有关对象的成员函数,去完成相应的操作。

在大多数情况下,主函数中甚至不出现控制结构(判断结构和循环结构),而在成员函数中使用控制结构。

在面向对象的程序设计中,最关键的工作是类的设计。所有的数据和对数据的操作都体现在类中。

0 0
原创粉丝点击