当前课程知识点:程序设计基础(下) >  拓展学习 >  面向对象方法应用实例 >  面向对象方法应用实例

返回《程序设计基础(下)》慕课在线视频课程列表

面向对象方法应用实例资料文件与下载

面向对象方法应用实例


面向对象方法应用实例

【例1】已有若干学生数据,包括学号,姓名,成绩,要求输出这些学生数据并计算平均分。

类设计分析:设计一个学生类Stud,除了包括number(学号)name(姓名)和deg(成绩)数据成员外,还有两个静态变量sum和num,分别存放总分和人数。设计一个构造函数用于初始化对象,一个普通成员函数disp()用于显示对象信息和一个静态成员函数avg()用于计算平均分。

完整的程序代码如下:

//p12_11.cpp

#include <iostream>

#include <string>

using namespace std;

class Stud

{

public:

Stud(int n,char na[],int d)   // 构造函数

{

m_number=n;

m_degree=d;

strcpy(m_name,na);

m_sum+=d;

m_numOfStu++;

}

static double Avg()        // 计算平均分

{

return m_sum/m_numOfStu;

}

void Disp()               //显示对象信息

{

cout<<m_number<<"   "<<m_name<<"   "<<m_degree<<endl;

}

private:

int m_number; // 学号

char m_name[10];       // 姓名

int m_degree; // 成绩

static int m_sum;    // 静态成员,总分

static int m_numOfStu; // 静态成员,人数

};

int Stud::m_sum=0;

int Stud::m_numOfStu=0;

int main()

{

Stud s1(1,"Li",89),s2(2, "Chen",78),s3(3, "Zheng",94);

s1.Disp();

s2.Disp();

s3.Disp();

cout<<"average="<<Stud::Avg()<<endl;

return 0;

}

运行结果为:

1 Li 89

2 Chen 78

3 Zheng   94

average=87

【例2】设计一个简单的词典类Dic,每个单词包括英文单词及对应的中文含义,并有一个英汉翻译成员函数,通过查词典的方式将一段英语翻译成对应的汉语。

类设计分析:词典类Dic包括m_top当前词典指针m_words英语单词库m_mean对应中文含义库)私有数据成员,以及一个构造函数Add()添加单词Trans()(英汉翻译)三个公有成员函数。

#include <string>

#include <iostream>

using namespace std;

#define Max 100

class Dic

{

public:

Dic(){m_top=0;}

void Add(char w[],char m[])

{

strcpy(m_words[m_top],w);

strcpy(m_mean[m_top],m);

m_top++;

}

void Trans(char []);

private:

int m_top;

char m_words[Max][12];

char m_mean[Max][20];

};

//翻译函数

void Dic::Trans(char str[])

{

int i=0,j=0,k=0,s;

char w[20],h[200];

while(1)

{

// 提取单词

if(str[i]!=' '&&str[i]!='\0')

w[j++]=str[i];

// 查字典

else

{

w[j]='\0';

for(s=0;s<=m_top;s++)

if(strcmp(m_words[s],w)==0)

break;

if(s<=m_top) // 查到了,将中文释义放入字符串w中

{

strcpy(w,m_mean[s]);

j=strlen(w);

}

else // 没查到,翻译为(unknown)

{

strcpy(w,"(unknown)");  // 没查到,将(unknown)放入字符串w

j=9;

}

// 将单词的中文释义加入到句子的中文释义中

for(s=0;s<j;s++)

h[k++]=w[s];

j=0;

if(str[i+1]=='\0')

{

h[k]='\0';

break;

}

}

i++;

}

// 输出英文原文和中文释义

cout<<"英文:"<<str<<endl;

cout<<"中文:"<<h<<endl;

}

int main()

{

Dic dic1; // 创建一本字典

dic1.Add("a","一个");

dic1.Add("I","我");

dic1.Add("am","是");

dic1.Add("student","学生");

dic1.Trans("I am a student");

dic1.Trans("hello");

return 0;

}

运行结果为:

英文: I am a student

中文:我是一个学生

英文:hello

中文:(unknown)

【例3】设计一个Complex类,进行复数的运算。复数的形式如下:

realpart + imaginaryPart * i

类设计分析:Complex类提供一个带默认参数的构造函数,不提供初始化值时,构造函数默认值给对象初始化类中包含公有成员函数Plus()用来做复数的加法、一个静态成员函数Sub()用来做复数的减法。一个普通友元函数Multi()用来做复数的乘法(设计成三种不同的函数类型,是为了让读者了解不同的处理方法在内部实现及函数调用形式上有什么不同)。Display()公有成员函数用来显示复数。两个私有数据成员 m_realPartm_imgPart用于表示复数的实部和虚部。

#include <iostream>

using namespace std;

class Complex

{

public:

Complex(float r=0,float i=0)

{

m_realPart=r;

m_imgPart=i;

}

void Display();

void Plus(Complex&);

static void Sub(Complex&, Complex&);

friend void Multi(Complex&,Complex&);

private:

float m_realPart;

float m_imgPart;

};

void Complex::Plus(Complex& x)

{

Complex result;

result.m_realPart=m_realPart+x.m_realPart;

result.m_imgPart=m_imgPart+x.m_imgPart;

result.Display();

}

void Complex::Sub(Complex& x, Complex& y)

{

Complex result;

result.m_realPart=x.m_realPart-y.m_realPart;

result.m_imgPart=x.m_imgPart-y.m_imgPart;

result.Display();

}

void Multi(Complex& x,Complex& y)

{

Complex result;

result.m_realPart=x.m_realPart*y.m_realPart-x.m_imgPart*y.m_imgPart;

result.m_imgPart=x.m_realPart*y.m_imgPart+x.m_imgPart*y.m_realPart;

result.Display();

}

void Complex::Display()

{

if(this->m_realPart==0&&this->m_imgPart==0)

cout<<0;

if(this->m_realPart!=0)

cout<<this->m_realPart;

if(this->m_imgPart>0)

cout<<"+"<<this->m_imgPart<<"i"<<endl;

else

if(this->m_imgPart<0)

cout<<this->m_imgPart<<"i"<<endl;

else

cout<<endl;

}

int main()

{

Complex x(5,5),y(2,-2);

x.Plus(y);                     //成员函数调用形式

Complex::Sub(x,y); //静态成员函数调用形式

Multi(x,y);                   //普通友元函数调用形式

return 0;

}

运行结果为:

7+3i

37i

20

【例4】设计一个Bank类,实现银行账号的资金往来账目管理,包括建账号、存入、取出等。

类设计分析:Bank类包括私有数据成员m_top(当前账指针),m_date(日期),m_money(金额),m_rest(余额)和静态私有数据成员m_sum(累计余额)。另有一个构造函数和三个成员函数Bankin()(处理存入账),Bankout()(处理取出账)和Disp()(输出明细账)。

#include <string>

#include <iostream>

using namespace std;

#define Max 100

class Bank

{

public:     

    Bank()

{

m_top=0;

m_sum=0;

}

    void Bankin(char d[],int m)

    {

strcpy(m_date[m_top],d);

        m_money[m_top]=m;

        m_sum=m_sum+m;

        m_rest[m_top]=m_sum;

        m_top++;

    }

    void Bankout(char d[],int m)

    {

        strcpy(m_date[m_top],d);

        m_money[m_top]=-m;

        m_sum=m_sum-m;

        m_rest[m_top]=m_sum;

        m_top++;

    }

    void Disp();

private:

int m_top;   

    char m_date[Max][15];      // 日期

    int m_money[Max];         // 金额

    int m_rest[Max];           // 剩余金额

    int m_sum;               // 累计余额

};

void Bank::Disp()

{

    int i=0;

    cout<<"  日期   存入  取出 余额"<<endl;

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

    {

cout.width(8);

cout<<right<<m_date[i];

cout<<"  ";

cout.width(11);

if(m_money[i]<0)

cout<<right<<-m_money[i];

else

cout<<left<<m_money[i];

cout.width(6);

cout<<right<<m_rest[i]<<endl;

    }

}

int main()

{

Bank obj;

obj.Bankin("2001.2.5",1000);

obj.Bankin("2001.3.2",2000);

obj.Bankout("2001.4.1",500);

obj.Bankout("2001.4.5",800);

obj.Disp();

return 0;

}

运行结果为:

日期         存入    取出    余额

2001.2.5    1000               1000

2001.3.2    2000               3000

2001.4.1                500     2500

2001.4.5                800     1700

【例 5】编写一个程序,统计学生成绩,其功能包括输入学生的姓名和成绩,按成绩从高到低排列打印输出, 80% 的学生定为合格PASS,而后 20% 的学生定为不合格FAIL)。

类设计分析:设计一个Student类,包含学生的姓名和成绩等私有数据成员,以及SetName()、SetDeg()、GetName()、和GetDeg()等四个成员函数。设计一个类Compute,包含两个私有数据成员,即学生人数m_numOfStuStudent类的对象组m_stuArray[],另有三个公共成员函数GetData()、Sort()、Disp(),它们分别用于获取数据、按成绩排序和输出数据。

#include <iostream>

using namespace std;

#define N 10

class Student

{

public:

void SetName(char na[]){strcpy(m_name,na);}

    char *GetName(){return m_name;}

    void SetDeg(int d){m_degree=d;}

    int GetDeg(){return m_degree;}

private:

char m_name[10];

    int m_degree;

};

class Compute

{

public:

void GetData();

    void Sort();

    void Disp();  

private:

int m_numOfStu;

    Student m_stuArray[N];    //对象成员,学生类对象数组

};

void Compute::GetData()

{

    int i,tdeg;

    char tname[10];

cout<<("输入学生人数");

cin>>m_numOfStu;

cout<<"  输入学生姓名和成绩\n";

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

    {

cin>>tname>>tdeg;

        m_stuArray[i].SetName(tname);

        m_stuArray[i].SetDeg(tdeg);

    }

}

void Compute::Sort()

{

    int i,j,pick;

    Student temp;

    for(i=0;i<m_numOfStu-1;i++)

    {

        pick=i;

        for(j=i+1;j<m_numOfStu;j++)

        {

            if(m_stuArray[j].GetDeg()>m_stuArray[pick].GetDeg())

                pick=j;

        }

        temp=m_stuArray[i];

        m_stuArray[i]=m_stuArray[pick];

        m_stuArray[pick]=temp;

    }

}

void Compute::Disp()

{

    int cutoff,i;

cout<<"输出结果\n";

cout<<"  姓名  成绩  合格否\n";

cout<<"  ----------------------------------\n";

    cutoff=m_numOfStu*8/10-1;

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

    {

cout.width(6);

cout<<left<<m_stuArray[i].GetName();

cout.width(6);

cout<<right<<m_stuArray[i].GetDeg();

        if(i<=cutoff)

cout<<"\tPASS\n";

        else

cout<<"\tFAIL\n";

    }

}

int main()

{

    Compute list;

    list.GetData();

    list.Sort();

    list.Disp();

return 0;

}

运行结果为:

输入学生人数: 10

输入学生姓名和成绩:

st1  67  st2  80  st3  90  st4  56  st5  88 

st6  75  st7  46  st8  90  st9  66  st10  89

输出结果

  姓名        成绩        合格否

  ----------------------------------

st3           90            PASS

st8           90          PASS

st10          89            PASS

st5           88            PASS

st2           80            PASS

st6           75            PASS

st1           67            PASS

st9           66            PASS

st4           56            FAIL

st7           46            FAIL

【例6】设计一个Date类,用来实现日期的操作。

类设计分析:构造函数带有默认参数,默认时间为1900年1月1日。

sSetDate()函数用来设置日期,并对日期的有效性进行检查。SetYear()、SetMonth()和SetDay()分别设置年、月、日,并对有效性进行检查。GetYear()、GetMonth()、GetDay()用来分别得到年、月、日。

IsLeapYear()函数用来测试某年是否为闰年。一个年份如果能被400整除,或者能被4整除而不能被100整除,则这一年份为闰年,否则为平年。

DaysOfMonth()函数用来得到该月的天数。

NewDate()函数用来计算在日期中增加相应天数或减少相应天数后的新日期。DateComp()函数用来比较两个日期的大小。GetSkip()函数用来计算两个日期相隔的天数。

程序用到较多的函数,所以用多文件结构实现。

//Date.h

class Date  

{

public:

static int DateComp(Date dt1,Date dt2);

static int GetSkip(Date&,Date&);

Date(int =1,int =1,int =1900);

void SetDate(int,int,int);

void SetMonth(int);

void SetDay(int);

void SetYear(int);

void GetDate(int&,int&,int&);

void GetMonth(int&);

void GetDay(int&);

void GetYear(int&);

void PrintDate();

static int IsLeapYear(int);

static int DaysOfMonth(Date&);

static Date NewDate(Date&,int);

private:

// 静态成员二维数组monthDays[][]存储每月的天数

// monthDays[0][]为平年每月天数,monthDays[1][]为闰年每月天数

static const int m_monthDays[2][12];

int m_month;

int m_day;

int m_year;

};

//Date.cpp

#include "Date.h"

#include "iostream"

using namespace std;

// 静态成员变量的初始化

const int Date::m_monthDays[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},

{31,29,31,30,31,30,31,31,30,31,30,31}};

Date::Date(int m,int d,int y)   // 构造函数

{

m_month=m;

m_day=d;

m_year=y;

}

void Date::SetDate(int m,int d,int y) // 设置日期,按照月、日年顺序

{

if(y<1500||y>2500)   // 判断年份是否在规定范围内

{

cerr<<"Year is wrong";

return;

}

if(m<0||m>12)   // 判断月份是否在规定范围内

{

cerr<<"Month is wrong";

return;

}

if(d<0||d>m_monthDays[Date::IsLeapYear(y)][m-1]) // 判断日是否在规定范围内

{

cerr<<"Day is wrong";

return;

}

m_month=m;

m_day=d;

m_year=y;

}

void Date::SetMonth(int m)   // 设置月份

{

if(m<0||m>12)   // 判断月份是否在规定范围内

{

cerr<<"Month is wrong";

return;

}

m_month=m;

}

void Date::SetDay(int d) // 设置日

{

// 判断日是否在规定范围内

if(d<0||d>m_monthDays[Date::IsLeapYear(m_year)][m_month-1])

{

cerr<<"Day is wrong";

return;

}

m_day=d;

}

void Date::SetYear(int y) // 设置年份

{

if(y<1500||y>2500)   // 判断年份是否在规定范围内

{

cerr<<"Year is wrong";

return;

}

m_year=y;

}

void Date::GetDate(int& m,int& d,int& y) // 读取日期

{

m=m_month;

d=m_day;

y=m_year;

}

void Date::GetMonth(int& m)   // 读取月份

{

m=m_month;

}

void Date::GetDay(int& d)   // 读取日

{

d=m_day;

}

void Date::GetYear(int& y)   // 读取年份

{

y=m_year;

}

void Date::PrintDate()   // 输出日期

{

cout<<m_month<<"-"<<m_day<<"-"<<m_year<<endl;

}

// 判断是否为闰年

int Date::IsLeapYear(int y)  

{

if(y%4==0&&y%100!=0||y%400==0)

return 1;

return 0;

}

// 返回该月的天数

int Date::DaysOfMonth(Date& dt)

{

int days;

// 根据是否为闰年,返回二维数组monthDays[][]中相应的月份天数

days=Date::m_monthDays[Date::IsLeapYear(dt.m_year)][dt.m_month-1];

return days;

}

// 计算日期中增加或减去相应的天数后的新日期

// 增加天数,参数days为正,减去天数,参数days为

Date Date::NewDate(Date& dt,int days)

{

Date tmpDate;

int d=dt.m_day;   // 当前日期的日子

int m=dt.m_month;

int y=dt.m_year;

int md;     // 变量,存储当月的天数

if(days>=0)   // 如果天数大于0,则计算向后的日期,否则计算向前的日期

{

while(1)

{

md=Date::m_monthDays[Date::IsLeapYear(y)][m-1]; //得到当月天数

// 如果当前日期的日子加上天数不超过当月最大天数,则计算完成

if(d+days<=md)

break;

// days减去当月的总天数和当前日子的差,计算出剩余的天数days

days-=md-d;

m++;

if(m==13) // 如果月份超过12

{

y++;   // 年份加1

m=1;   // 月份回到1

}

d=0;   // 进入到新的月份,日子清0

}

tmpDate.SetDate(m,days,y);

}

else   // 计算向前的日期

{

days=-days;   // 将负天数变为正天数,便于计算

while(1)

{

if(d>days) // 如果当前日期的日子大于剩余天数,则计算完成

break;

days-=d;   // 剩余天数days为当前天数days和当月日子的差

m--;   // 月份减1

if(m==0)    // 如果月份为0

{

y--;   // 年份减1

m=12;   // 月份变为12

}

// 得到当月的最大天数

md=Date::m_monthDays[Date::IsLeapYear(y)][m-1];

d=md;

}

tmpDate.SetDate(m,d-days,y);

}

return tmpDate;

}

// 计算两个日期间相差的天数

// 如果dt1在dt2之后,返回正数,否则,返回负数

int Date::GetSkip(Date &dt1, Date &dt2)

{

int days1=0,days2=0,years=0,skip=0,i,flag;

Date tmp1,tmp2;

flag=Date::DateComp(dt1,dt2);   // 比较两个日期的大小,将结果存入flag

if(flag==0)   // 如果日期相等,则返回

return 0;

// 变量tmp1中存储较大的日期,tmp2中存储较小的日期

if(flag>0)

tmp1=dt1,tmp2=dt2;  

else

tmp1=dt2,tmp2=dt1;

// 计算日期tmp1从月日开始的总天数

for(i=1;i<tmp1.m_month;i++)

days1+=Date::m_monthDays[Date::IsLeapYear(tmp1.m_year)][i-1];

days1+=tmp1.m_day;

// 计算日期tmp2从月日开始的总天数

for(i=1;i<tmp2.m_month;i++)

days2+=Date::m_monthDays[Date::IsLeapYear(tmp2.m_year)][i-1];

days2+=tmp2.m_day;

//计算两个日期年份相差的总天数

for(i=tmp2.m_year;i<tmp1.m_year;i++)

{

if(Date::IsLeapYear(i))

years+=366;

else

years+=365;

}

// 日期相差天数为年份相差总天数与月份日子相差总天数之和

skip=years+days1-days2;

// 根据日期的大小,判断返回正数或者负数

if(flag>0)

return skip;

else

return -skip;

}

// 比较两个日期的大小

int Date::DateComp(Date dt1, Date dt2)

{

if(dt1.m_year>dt2.m_year)

return 1;

else if(dt1.m_year<dt2.m_year)

return -1;

if(dt1.m_month>dt2.m_month)

return 1;

else if(dt1.m_month<dt2.m_month)

return -1;

if(dt1.m_day>dt2.m_day)

return 1;

else if(dt1.m_day<dt2.m_day)

return -1;

return 0;

}

 

//mainProgram.cpp

#include "date.h"

#include "iostream"

using namespace std;

int main()

{

int y;

Date dt1(2,18,2003),dt2(10,11,2000);      // 声明两个Date对象并初始化

dt2.GetYear(y);   // 得到dt2的年份并存入变量y

if(Date::IsLeapYear(y))   // 判断y是否为闰年

cout<<"是闰年。"<<endl;

else

cout<<"是平年。"<<endl;

cout<<"日期间隔为:";

cout<<Date::GetSkip(dt1,dt2)<<endl;   // 计算dt1和dt2的日期间隔

dt2.SetDate(3,26,2005);   // 重新设置日期对象dt2

cout<<"日期间隔为:";

cout<<Date::GetSkip(dt1,dt2)<<endl;  // 计算两个日期间隔

cout<<"日期为:";

Date::NewDate(dt2,100).PrintDate();   / 计算从dt2开始,100天后的日期

return 0;

}

运行结果为:

是闰年

日期间隔为:860

日期间隔为:-767

日期为:7-4-2005


下一节:继承与多态应用实例

返回《程序设计基础(下)》慕课在线视频列表

程序设计基础(下)课程列表:

拓展学习

-C++的常见错误

--C++的常见错误

-MFC入门

--MFC入门

-STL及使用示例

--STL及使用示例

-算法设计与算法分析基础

--算法设计和算法分析基础

-算法设计基本方法与策略基础

--算法设计基本方法与策略基础

-计算机前沿问题思考

--计算机前沿问题思考

-QT编程入门

--QT编程入门

-C++中的string类

--C++中的string类

-面向对象方法应用实例

--面向对象方法应用实例

-继承与多态应用实例

--继承与多态应用实例

-排序算法

--排序算法

-C++常见问题汇总

--C++常见问题汇总

南开大学往届学长课程学习感悟

-学习感悟(1)

--学习感悟(1)

-学习感悟(2)

--学习感悟(2)

-学习感悟(3)

--学习感悟(3)

-学习感悟(4)

--学习感悟(4)

-2016级数学院同学分享

优秀大作业展示

-优秀大作业展板

第一章 面向对象方法

-1.1面向对象方法的基本概念

--1.1面向对象方法的基本概念

-1.1面向对象方法的基本概念--作业

-1.2 C++中类的定义

--1.2C++中类的定义

-1.2 C++中类的定义

-1.3C++中对象的定义和访问

--1.3C++中对象的定义和访问

-1.3C++中对象的定义和访问--作业

-1.4类成员的访问控制

--1.4类成员的访问控制

-1.4类成员的访问控制--作业

-1.5析构函数

--1.5析构函数

-1.5析构函数--作业

-1.6拷贝构造函数

--1.6拷贝构造函数

-1.6拷贝构造函数--作业

-1.7 类声明与类实现的分离

--1.7 类声明与类实现的分离

-1.7 类声明与类实现的分离--作业

-1.8类的静态成员

--1.8类的静态成员

-1.8类的静态成员--作业

-1.9类的常量成员

--1.9类的常量成员

-1.9类的常量成员--作业

-1.10this指针

--1.10this指针

-1.10this指针--作业

-1.11类的友元

--1.11类的友元

-1.11类的友元--作业

-1.12类的对象成员

--1.12类的对象成员

-1.12类的对象成员--作业

-1.13自定义类的运算符重载

--1.13自定义类的运算符重载

-1.13自定义类的运算符重载--作业

第二章 继承与多态

-2.1 派生类的定义和继承方式

--2.1 派生类的定义和继承方式

-2.1 派生类的定义和继承方式--作业

-2.2 派生类中函数的重定义

--2.2 派生类中函数的重定义

-2.2 派生类中函数的重定义--作业

-2.3派生类的构造函数和析构函数

--2.3派生类的构造函数和析构函数

-2.3派生类的构造函数和析构函数--作业

-2.4多继承

--2.4多继承

-2.4多继承--作业

-2.5多态

--2.5多态

-2.5多态--作业

-2.6抽象类

--2.6抽象类

-2.6抽象类--作业

第三章 输入输出流

-3.1cout和cin对象及插入和提取运算符

--3.1cout和cin对象及插入和提取运算符

-3.1cout和cin对象及插入和提取运算符--作业

-3.2 使用put和get函数进行标准输出和输入

--3.2 使用put和get函数进行标准输出和输入

-3.3使用getline函数进行标准输入

--3.3使用getline函数进行标准输入

-3.3使用getline函数进行标准输入--作业

-3.4 文件流对象

--3.4 文件流对象

-3.5文件流对象及插入和提取运算符

--3.5文件流对象及插入和提取运算符

-3.5文件流对象及插入和提取运算符--作业

-3.6文件流对象及put、get和getline函数

--3.6文件流对象及put、get和getline函数

-3.7按数据块进行输入输出

--3.7按数据块进行输入输出

-3.8按数据块进行输入输出实例

--3.8按数据块进行输入输出实例

-3.8按数据块进行输入输出实例--作业

-3.9文件的随机读写

--3.9文件的随机读写

-3.9文件的随机读写--作业

-3.10用户自定义数据类型的输入输出

--3.10用户自定义数据类型的输入输出

-3.10用户自定义数据类型的输入输出--作业

第四章 模板

-4.1函数模板

--4.1函数模板

-4.1函数模板--作业

-4.2类模板

--4.2类模板

-4.2类模板--作业

第五章 概论

-5.1数据结构基本概念(一)

--5.1数据结构基本概念(一)

-第五章 概论--5.1数据结构基本概念(一)

-5.2数据结构基本概念(二)

--5.2数据结构基本概念(二)

-5.2数据结构基本概念(二)--作业

第六章 线性表

-6.1线性表及其抽象数据类型

--6.1线性表及其抽象数据类型

-6.1线性表及其抽象数据类型--作业

-6.2顺序表类模板

--6.2顺序表类模板

-6.2顺序表类模板--作业

-6.3顺序表的实现

--6.3顺序表的实现

-6.3顺序表的实现--作业

-6.4简单数据元素顺序表的应用问题

--6.4简单数据元素顺序表的应用问题

-6.4简单数据元素顺序表的应用问题--作业

-6.5复杂数据元素顺序表的应用问题

--6.5复杂数据元素顺序表的应用问题

-6.5复杂数据元素顺序表的应用问题--作业

-6.6单向链表及其类模板

--6.6单向链表及其类模板

-6.6单向链表及其类模板--作业

-6.7单项链表的实现(一)

--6.7单项链表的实现(一)

-6.7单项链表的实现(一)--作业

-6.8单项链表的实现(二)

--6.8单项链表的实现(二)

-6.8单项链表的实现(二)--作业

-6.9单向链表的应用

--6.9单向链表的应用

-6.10循环链表及双向链表

--6.10循环链表及双向链表

第七章 栈和队列

-7.1栈及顺序栈

--7.1栈及顺序栈

-7.1栈及顺序栈--作业

-7.2 顺序栈的实现

--7.2 顺序栈的实现

-7.2 顺序栈的实现--作业

-7.3顺序栈的应用

--7.3顺序栈的应用

-7.4 链接栈及其实现

--7.4 链接栈及其实现

-7.4 链接栈及其实现--作业

-7.5队列及其顺序存储

--7.5队列及其顺序存储

-7.5队列及其顺序存储--作业

-7.6 顺序循环队列的实现

--7.6 顺序循环队列的实现

-7.6 顺序循环队列的实现--作业

-7.7顺序循环队列的应用

--7.7顺序循环队列的应用

-7.8链接队列及其实现

--7.8链接队列及其实现

-7.8链接队列及其实现--作业

第八章 树和二叉树

-8.1树的基本概念

--8.1树的基本概念

-8.1树的基本概念--作业

-8.2二叉树及其性质

--8.2二叉树及其性质

-8.2二叉树及其性质--作业

-8.3二叉树的抽象数据类型和顺序表示

--8.3二叉树的抽象数据类型和顺序表示

-8.3二叉树的抽象数据类型和顺序表示--作业

-8.4二叉树的链式表示

--8.4二叉树的链式表示

-第八章 树和二叉树--8.4二叉树的链式表示

-8.5二叉链表的实现(一)

--8.5二叉链表的实现(一)

-8.6二叉链表的实现(二)先序和中序遍历

--8.6二叉链表的实现(二)先序和中序遍历

-8.6二叉链表的实现(二)先序和中序遍历--作业

-8.7二叉链表的实现(三)后序和逐层遍历

--8.7二叉链表的实现(三)后序和逐层遍历

-8.7二叉链表的实现(三)后序和逐层遍历--作业

-8.8二叉链表的实现(四)

--8.8二叉链表的实现(四)

-8.9 二叉排序树

--8.9 二叉排序树

-8.10哈夫曼树和哈夫曼编码

--8.10哈夫曼树和哈夫曼编码

第九章 图

-9.1图的基本概念及其特征

--9.1图的基本概念及其特征

-9.1图的基本概念及其特征--作业

-9.2图的抽象数据类型和表示方式

--Video

-9.2图的抽象数据类型和表示方式--作业

-9.3图的邻接矩阵表示法的实现

--9.3图的邻接矩阵表示法的实现

-9.3图的邻接矩阵表示法的实现--作业

-9.4图的广度优先遍历

--Video

-9.4图的广度优先遍历--作业

-9.5图的深度优先遍历

--9.5图的深度优先遍历

-9.5图的深度优先遍历--作业

-9.6图的应用

--9.6 图的应用

例题及视频讲解

-面向对象方法

--面向对象例题讲解

-- 类和对象的基本定义、构造函数和析构函数

--静态成员和多文件结构

--友元和运算符重载

--对象成员

-继承与多态

--派生类定义和函数重定义

--多重继承

--虚函数

--抽象类和纯虚函数

-输入输出流

--输入输出流操作

--插入运算符和提取运算符重载

-模板

--函数模板

--类模板

百年南开 风华正茂

-央视新闻关于南开大学的报道

百年沧桑到民族复兴

-从百年沧桑到民族复兴1

-从百年沧桑到民资复兴2

-从百年沧桑到民族复兴3

-从百年沧桑到民族复兴4

-从百年沧桑到民族复兴5

面向对象方法应用实例笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。