代码是程序员的朋友,虽然没有热情,但是非常忠实。
上午的主要内容内容讲到了链表的知识,对于链表其实就是一个循环,从头到末尾,你可以对其中的数据进行增删该查,下面用代码来说明一切。
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构
是不是还是很懵,那就对了,对于这个链表表面上不是很好理解,但是用代码来表示还是很好理解,感谢唐哥用这么这么简单明了的方法。
//#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个元素中的最大值)
请注意成员函数定义与调用成员函数的关系,定义成员函数只是设计了一组操作代码,并未实际执行,只有在被调用时才真正地执行这一组操作。
可以看出: 主函数很简单,语句很少,只是调用有关对象的成员函数,去完成相应的操作。
在大多数情况下,主函数中甚至不出现控制结构(判断结构和循环结构),而在成员函数中使用控制结构。
在面向对象的程序设计中,最关键的工作是类的设计。所有的数据和对数据的操作都体现在类中。