版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
關(guān)聯(lián)和連接及其實(shí)現(xiàn)《C++面向?qū)ο蟪绦蛟O(shè)計(jì)導(dǎo)論》--從抽象到編程第3章關(guān)聯(lián)與連接3.1關(guān)聯(lián)與連接的概念3.2關(guān)聯(lián)的實(shí)現(xiàn)第3章關(guān)聯(lián)與連接本節(jié)學(xué)習(xí)目標(biāo)能夠運(yùn)用語(yǔ)文知識(shí)和數(shù)學(xué)知識(shí)解釋關(guān)聯(lián)和連接及其表述能夠運(yùn)用關(guān)聯(lián)和連接描述事物之間的關(guān)系能夠使用指針實(shí)現(xiàn)關(guān)聯(lián)及其連接能夠運(yùn)用集合論解釋關(guān)聯(lián)和連接的實(shí)現(xiàn)方法連接(Link)是對(duì)客觀事物之間的一個(gè)關(guān)系的抽象,是一個(gè)關(guān)系在計(jì)算機(jī)世界中的反映關(guān)聯(lián)(Association)是對(duì)連接的抽象,是一種關(guān)系在計(jì)算機(jī)世界中的反映。關(guān)聯(lián)和連接是面向?qū)ο笏枷胫械膬蓚€(gè)基本概念3.1關(guān)聯(lián)與連接的概念語(yǔ)文中,使用陳述語(yǔ)句描述客觀事物及其相互關(guān)系,陳述語(yǔ)句主要采用“主動(dòng)賓”格式數(shù)學(xué)中,使用元素之間的對(duì)應(yīng)關(guān)系來(lái)描述客觀事物及其相互關(guān)系3.1關(guān)聯(lián)與連接的概念(表示)3.2.1使用指針實(shí)現(xiàn)多對(duì)一關(guān)聯(lián)3.2.2使用指針數(shù)組實(shí)現(xiàn)多對(duì)多關(guān)聯(lián)數(shù)學(xué)中,對(duì)應(yīng)關(guān)系有一對(duì)一、多對(duì)一和多對(duì)多三種類型3.2關(guān)聯(lián)的實(shí)現(xiàn)導(dǎo)航(Navigation)角色(Role)重?cái)?shù)(Multiplicity)一個(gè)人喜歡一種體育運(yùn)動(dòng)一種體育運(yùn)動(dòng)可被多個(gè)人喜歡使用工具有助于發(fā)現(xiàn)解決問(wèn)題的關(guān)鍵因素3.2.1使用指針實(shí)現(xiàn)多對(duì)一關(guān)聯(lián)使用指針Sport*sport實(shí)現(xiàn)多對(duì)一關(guān)聯(lián)like編碼實(shí)現(xiàn)#include
"Sport.h"class
Person{public: Person(); Person(char*pName); ~Person();
boollike(Sport*likeSport); Sport*likedSport();
voidprint();
private:
charname[20];
Sport*sport;//指向最喜歡的運(yùn)動(dòng)};【例3.1】使用成員指針表示多對(duì)一關(guān)聯(lián)中的連接class
Sport{public: Sport(); Sport(char*pName);
voidprint(); ~Sport();
private:
charname[20];};#include
<iostream>#include
<string.h>#include
"Sport.h"using
namespacestd;
Sport::Sport(){}Sport::Sport(char*pName){ strncpy(name,pName,sizeof(name)); name[sizeof(name)-1]='\0';}void
Sport::print(){ cout<<name<<endl;}Sport::~Sport(){}【例3.1】使用成員指針表示多對(duì)一關(guān)聯(lián)中的連接#include
<iostream>#include
<string.h>#include
"Sport.h"#include
"Person.h"using
namespacestd;
Person::Person(){}Person::Person(char*pName){ strncpy(name,pName,sizeof(name)); name[sizeof(name)-1]='\0';}Person::~Person(){}voidPerson::like(Sport*likeSport){ sport=likeSport;}Sport*Person::likedSport(){
returnsport;}voidPerson::print(){ cout<<name;}#include<iostream>#include"Sport.h"#include"Person.h"usingnamespacestd;
voidmain(){ Sports1("足球"); Sports2("籃球"); Sports3("乒乓球");
Personp1("張三"); p1.like(&s1); p1.print(); cout<<"最喜歡"; p1.likedSport()->print();
Personp2("李四"); p2.like(&s2); p2.print(); cout<<"最喜歡"; p2.likedSport()->print();
Personp3("王五"); p3.like(&s2); p3.print(); cout<<"最喜歡"; p3.likedSport()->print();}【例3.2】維護(hù)多對(duì)一關(guān)聯(lián)中的連接#include<iostream>#include<string.h>#include"Sport.h"#include"Person.h"usingnamespacestd;
Person::Person(){}Person::Person(char*pName){ strncpy(name,pName,sizeof(name)); name[sizeof(name)-1]='\0';}Person::~Person(){}voidPerson::like(Sport*likeSport){ sport=likeSport;}Sport*Person::likedSport(){ returnsport;}voidPerson::print(){ cout<<name;}#include<iostream>#include"Sport.h"#include"Person.h"usingnamespacestd;
voidmain(){ Sports1("足球"); Sports2("籃球"); Sports3("乒乓球");
Personp1("張三"); p1.like(&s1); p1.print();
cout<<"最喜歡"; p1.likedSport()->print();
Personp2("李四"); p2.like(&s2); p2.print(); cout<<"最喜歡"; p2.likedSport()->print();
Personp3("王五"); p3.like(&s2); p3.print(); cout<<"最喜歡"; p3.likedSport()->print();}【例3.2】維護(hù)多對(duì)一關(guān)聯(lián)中的連接#include<iostream>#include"Sport.h"#include"Person.h"usingnamespacestd;voidmain(){ Sports1("足球"); Sports2("籃球"); Sports3("乒乓球");
Personp1("張三"); p1.like(&s1); p1.print(); cout<<"最喜歡"; p1.likedSport()->print();
Personp2("李四"); p2.like(&s2); p2.print(); cout<<"最喜歡"; p2.likedSport()->print();
Personp3("王五"); p3.like(&s2); p3.print(); cout<<"最喜歡"; p3.likedSport()->print();}【例3.2】維護(hù)多對(duì)一關(guān)聯(lián)中的連接//Person.h#include
"Sport.h"class
Person{public: Person(); Person(char*pName); ~Person();
voidlike(Sport*likeSport); Sport**likedSport();
voidprint();
private:
charname[20];
Sport*sport[3];//指向喜歡的3項(xiàng)運(yùn)動(dòng)};3.2.2使用指針數(shù)組實(shí)現(xiàn)多對(duì)多關(guān)聯(lián)一個(gè)人喜歡0到3種體育運(yùn)動(dòng)//Person.cpp#include<iostream>#include<string.h>#include"Sport.h"#include"Person.h"usingnamespacestd;
Person::Person(){ for(inti=0;i<3;i++) sport[i]=NULL;//設(shè)置為空,表示沒(méi)有指向?qū)ο髛Person::Person(char*pName){ strncpy(name,pName,sizeof(name)); name[sizeof(name)-1]='\0'; for(inti=0;i<3;i++) sport[i]=NULL;}Person::~Person(){}boolPerson::like(Sport*likeSport){ inti=0; while(i<3&&sport[i]) i++; if(i<3){ sport[i]=likeSport; returntrue; }else{ returnfalse;//超過(guò)3項(xiàng)返回錯(cuò)誤 }}Sport**Person::likedSport(){ returnsport;}voidPerson::print(){ cout<<name; cout<<"喜歡"; for(inti=0;i<3;i++) sport[i]->print();}//app.cpp#include"Sport.h"#include"Person.h"usingnamespacestd;voidmain(){ Sports1("足球"); Sports2("籃球"); Sports3("乒乓球"); Sports4("跳高");
Personp1("張三"); p1.like(&s1); p1.like(&s2); p1.like(&s3); p1.like(&s4);//超過(guò)3項(xiàng)不存儲(chǔ) p1.print();
Personp2("李四"); p2.like(&s4); p2.like(&s3); p2.like(&s2); p2.like(&s1);//超過(guò)3項(xiàng)不存儲(chǔ) p2.print();}【例3.4】維護(hù)多對(duì)多關(guān)聯(lián)中的連接張三喜歡足球籃球乒乓球李四喜歡跳高乒乓球籃球請(qǐng)使用時(shí)序圖描述程序運(yùn)行過(guò)程。例3.4程序的輸出結(jié)果練習(xí)調(diào)試通過(guò)例3.4的代碼按照下面的語(yǔ)義重做分析設(shè)計(jì)和編碼實(shí)現(xiàn)一個(gè)人喜歡0到5種體育運(yùn)動(dòng)總結(jié)及進(jìn)一步學(xué)習(xí)分析:使用關(guān)聯(lián)和連接抽象事物之間的關(guān)系設(shè)計(jì):使用關(guān)聯(lián)、連接等UML工具描述類及對(duì)象之間的關(guān)系編碼:使用指針編程實(shí)現(xiàn)關(guān)聯(lián)及其連接3.3組合與聚合關(guān)聯(lián)進(jìn)一步學(xué)習(xí)第3章關(guān)聯(lián)與連接3.3組合與聚合關(guān)聯(lián)3.2關(guān)聯(lián)的實(shí)現(xiàn)第3章關(guān)聯(lián)與連接學(xué)習(xí)目標(biāo)能夠運(yùn)用組合關(guān)聯(lián)和聚合關(guān)聯(lián)等知識(shí)解釋事物的內(nèi)部構(gòu)成能夠使用組合關(guān)聯(lián)、聚合關(guān)聯(lián)等UML工具描述事物的內(nèi)部關(guān)系能夠使用對(duì)象和指針實(shí)現(xiàn)組合關(guān)聯(lián)能夠使用代碼實(shí)現(xiàn)聚合關(guān)聯(lián)關(guān)聯(lián)分為一般關(guān)聯(lián)(Association)、聚合(Aggregation)和組合(Composition)三種3.3組合與聚合關(guān)聯(lián)組合關(guān)聯(lián):具有相同的生命周期聚合關(guān)聯(lián):具有不同的生命周期3.3組合與聚合關(guān)聯(lián)3.3.1使用對(duì)象實(shí)現(xiàn)組合關(guān)聯(lián)3.3.2使用指針實(shí)現(xiàn)組合關(guān)聯(lián)3.3.3使用代碼實(shí)現(xiàn)聚合關(guān)聯(lián)使用對(duì)象StudentIDstudentID實(shí)現(xiàn)組合關(guān)聯(lián)3.3.1使用對(duì)象實(shí)現(xiàn)組合關(guān)聯(lián)3.3.1使用對(duì)象實(shí)現(xiàn)組合關(guān)聯(lián)//Student.h#include
"StudentID.h"
class
Student{public:Student();Student(intid);Student(intid,char*pName);Student(intid,char*pName,intxHours,floatxgpa);~Student();
private:
charname[20];intsemesHours;floatgpa;
StudentIDstudentID;//表示多對(duì)一組合關(guān)聯(lián)中的連接};【例3.5】使用對(duì)象表示多對(duì)一組合關(guān)聯(lián)的連接//StudentID.hclass
StudentID{public: StudentID(); StudentID(intid); ~StudentID();
voidprint();
private:
boolisValid(void);
intvalue;};//StudentID.cpp#include
<iostream>#include
<string.h>#include
"StudentID.h"using
namespacestd;
StudentID::StudentID(){ cout<<"\t"<<"調(diào)用構(gòu)造函數(shù)StudentID()"<<endl;}StudentID::StudentID(int
id){ cout<<"\t"<<"調(diào)用構(gòu)造函數(shù)StudentID("<<id<<")"<<endl;
if(isValid()) value=id;}StudentID::~StudentID(){ cout<<"析構(gòu)StudentID:"<<value<<endl;}void
StudentID::print(){ cout<<value<<endl;}bool
StudentID::isValid(){
//可增加判斷學(xué)號(hào)是否符合編碼規(guī)則的代碼
return
true;}
【例3.5】使用對(duì)象表示多對(duì)一組合關(guān)聯(lián)的連接//Student.cpp#include
<iostream>#include
<string.h>#include
"StudentID.h"#include
"Student.h"using
namespacestd;
Student::Student(){ cout<<"調(diào)用構(gòu)造函數(shù)Student()"<<endl<<endl;}
Student::Student(int
id):studentID(id)//增加了新的語(yǔ)法{ cout<<"調(diào)用構(gòu)造函數(shù)Student("<<id<<")"<<endl<<endl;}
Student::Student(int
id,char*pName):studentID(id){ cout<<"調(diào)用構(gòu)造函數(shù)Student("<<id<<","<<pName <<")"<<endl<<endl;
strncpy(name,pName,sizeof(name)); name[sizeof(name)-1]='\0';}
Student::Student(int
id,char*pName,int
xHours,float
xgpa):studentID(id){ cout<<"調(diào)用構(gòu)造函數(shù)Student("<<id<<","<<pName <<","<<xHours<<","<<xgpa <<")"<<endl<<endl; strncpy(name,pName,sizeof(name)); name[sizeof(name)-1]='\0'; semesHours=xHours; gpa=xgpa;}
Student::~Student(){ cout<<"析構(gòu)Student:"; studentID.print();}//app.cpp#include
"StudentID.h"#include
"Student.h"
voidmain(){ Students1(210101,"Randy"); Students2(210102,"Randy"); Students3(210103,"Jenny",10,3.5);}運(yùn)行過(guò)程和結(jié)果3.3.2使用指針實(shí)現(xiàn)組合關(guān)聯(lián)編寫(xiě)代碼同步生命周期Person對(duì)象管理Tdate對(duì)象構(gòu)造函數(shù)析構(gòu)函數(shù)【例3.7】使用指針實(shí)現(xiàn)組合關(guān)聯(lián)#include
<iostream>#include
"Tdate.h"#include
<iostream>using
namespacestd;class
Person{public: Person(){};
Person(char
n[],Tdated){ strncpy(name,n,sizeof(name)); name[sizeof(name)-1]='\0';
birthday=newTdate(d);//創(chuàng)建一個(gè)新的Tdate對(duì)象 };
~Person(){
deletebirthday;//刪除連接的Tdate對(duì)象 };
voidprint(){ cout<<"Person:"<<name<<","; birthday->print(); }; TdategetBirthday()const{
returnTdate(*birthday);//返回一個(gè)新對(duì)象而沒(méi)有返回指針birthday,以保證安全 }
Person(const
Person&oldPerson){ memcpy(this,&oldPerson,sizeof(Person));//將oldPerson的內(nèi)存中的數(shù)據(jù)復(fù)制內(nèi)存
birthday=newTdate(oldPerson.getBirthday());//創(chuàng)建一個(gè)新的Tdate對(duì)象 };private:
Tdate*birthday;//使用指針表示多對(duì)一組合關(guān)聯(lián)
charname[20];};Personfn(Person
p){
return
p;}Person*fnPtr(Person*p){
return
p;}voidmain(){ Tdated1(1,2,2000); Tdated2(1,2,2021);
cout<<"****Person對(duì)象****"<<endl;
Personp1("張三",d1);
Personp2("李四",d1);
cout<<"****傳遞*Person對(duì)象****"<<endl;
fn(p1).print();
cout<<"****傳遞*Person對(duì)象指針****"<<endl;
fnPtr(&p2)->print();
cout<<"****main語(yǔ)句結(jié)束****"<<endl;}運(yùn)行過(guò)程和結(jié)果在組合關(guān)聯(lián)中,由于“整體”和“部分”的生命周期相同,在創(chuàng)建“整體”時(shí)需要同時(shí)創(chuàng)建“部分”,在刪除“整體”時(shí)需要同時(shí)刪除“部分”,創(chuàng)建和刪除“部分”的職責(zé)自然而然地賦予了構(gòu)造函數(shù)和析構(gòu)函數(shù)。3.3.3使用代碼實(shí)現(xiàn)聚合關(guān)聯(lián)生命周期不同“部分”可以獨(dú)立存在程序員的責(zé)任只維護(hù)連接不必維護(hù)對(duì)象語(yǔ)言編譯器不提供編碼實(shí)現(xiàn)語(yǔ)義【例3.8】類Motor和Wheel//Motor.hclass
Motor{public: Motor(intsn,floatfPower); ~Motor();
voidprint();
private:
intserialNumber;//產(chǎn)品序列號(hào)
floatpower;//發(fā)動(dòng)機(jī)的排量};//Motor.cpp#include
<iostream>#include
"Motor.h"using
namespacestd;
Motor::Motor(int
sn,float
fPower){
cout<<"調(diào)用構(gòu)造函數(shù)Motor("<<sn<<","<<fPower<<")"<<endl;
serialNumber=sn; power=fPower;}Motor::~Motor(){
cout<<"析構(gòu)Motor:"<<serialNumber<<endl;}void
Motor::print(){ cout<<serialNumber<<","<<power;}【例3.9】類Motor和Wheel//Wheel.hclass
Wheel{public: Wheel(intsn,floatfSize); ~Wheel();
voidprint();private:
intserialNumber;//產(chǎn)品序列號(hào)
floatsize;//車輪大小};//Wheel.cpp#include
"Wheel.h"#include
<iostream>using
namespacestd;Wheel::Wheel(int
sn,float
fSize){
cout<<"調(diào)用構(gòu)造函數(shù)Wheel("<<sn<<","<<fSize<<")"<<endl;
serialNumber=sn; size=fSize;}Wheel::~Wheel(){
cout<<"析構(gòu)Wheel:"<<serialNumber<<endl;}void
Wheel::print(){
cout<<serialNumber<<","<<size;}【例3.9】類Car//Car.h#include"Wheel.h"#include
"Motor.h"
class
Car{public: Car(Motor&mMotor,Wheel**aWheel); ~Car();
Motor&set(Motor&depart);
Wheel&set(Wheel&depart,intposition);
voidprint();
private:
Wheel*wheel[4];//指向4個(gè)車輪
Motor*motor;//指向發(fā)動(dòng)機(jī)};//Car.cpp#include
"Motor.h"#include
"Wheel.h"#include
"Car.h"#include
<iostream>using
namespacestd;Car::Car(Motor&mMotor,Wheel*aWheel[]):motor(&mMotor){ cout<<"調(diào)用構(gòu)造函數(shù)Car(";
mMotor.print(); cout<<")"<<endl;
for(inti=0;i<4;i++){ wheel[i]=aWheel[i]; }}Car::~Car(){ cout<<"析構(gòu)Car:"<<endl;
for(inti=0;i<4;i++){ //刪除4個(gè)車輪對(duì)象
deletewheel[i]; }
deletemotor; //刪除發(fā)動(dòng)機(jī)對(duì)象}Motor&Car::set(Motor&depart){
Motor&rt=*motor;
motor=&depart;
returnrt;}Wheel&Car::set(Wheel&depart,int
position){
Wheel&rt=*wheel[position];
wheel[position]=&depart;
returnrt;}void
Car::print(){ cout<<"汽車\t發(fā)動(dòng)機(jī):"; motor->print(); cout<<"\t\t車輪:";
for(inti=0;i<4;i++){ wheel[i]->print(); cout<<"|"; } cout<<endl;}【例3.10】主程序//CarApp.cpp #include
"Motor.h"#include
"Wheel.h"#include
"Car.h"#include
<iostream>using
namespacestd;
voidmain(){ cout<<"***********創(chuàng)建發(fā)動(dòng)機(jī)***********"<<endl;
Motor&m1=*(new
Motor(101,1.6));//為堆中的對(duì)象取了一個(gè)名稱,以便后面使用
Motor&m2=*(new
Motor(102,2.0));
Motor&m3=*(new
Motor(103,1.6)); cout<<"***********創(chuàng)建車輪***********"<<endl;
const
intlen=10;
Wheel*wBase[len];
for(inti=0;i<len;i++){ wBase[i]=new
Wheel(201+i,10); } cout<<"***********創(chuàng)建汽車***********"<<endl;
Car&c1=*(newCar(m1,wBase)); c1.print(); Car&c2=*(newCar(m2,wBase+4)); c2.print(); cout<<"***********更換并報(bào)廢部件***********"<<endl;
Wheel&w1=c1.set(*wBase[8],1);//換第一個(gè)車輪
delete&w1; //報(bào)廢車輪,刪除它
Motor&t=c1.set(m3);//換發(fā)動(dòng)機(jī)
delete&t; //報(bào)廢發(fā)動(dòng)機(jī),刪除它 cout<<"***********報(bào)廢汽車***********"<<endl;
delete&c1;
delete&c2; cout<<"***********刪除庫(kù)存中沒(méi)有使用的車輪***********"<<endl;
deletewBase[9];}運(yùn)行結(jié)果***********創(chuàng)建發(fā)動(dòng)機(jī)***********調(diào)用構(gòu)造函數(shù)Motor(101,1.6)調(diào)用構(gòu)造函數(shù)Motor(102,2)調(diào)用構(gòu)造函數(shù)Motor(103,1.6)***********創(chuàng)建車輪***********調(diào)用構(gòu)造函數(shù)Wheel(201,10)調(diào)用構(gòu)造函數(shù)Wheel(202,10)調(diào)用構(gòu)造函數(shù)Wheel(203,10)調(diào)用構(gòu)造函數(shù)Wheel(204,10)調(diào)用構(gòu)造函數(shù)Wheel(205,10)調(diào)用構(gòu)造函數(shù)Wheel(206,10)調(diào)用構(gòu)造函數(shù)Wheel(207,10)調(diào)用構(gòu)造函數(shù)Wheel(208,10)調(diào)用構(gòu)造函數(shù)Wheel(209,10)調(diào)用構(gòu)造函數(shù)Wheel(210,10)***********創(chuàng)建汽車***********調(diào)用構(gòu)造函數(shù)Car(101,1.6)汽車
發(fā)動(dòng)機(jī):101,1.6車輪:201,10|202,10|203,10|204,10|調(diào)用構(gòu)造函數(shù)Car(102,2)汽車
發(fā)動(dòng)機(jī):102,2車輪:205,10|206,10|207,10|208,10|***********更換并報(bào)廢部件***********析構(gòu)Wheel:202析構(gòu)Motor:101***********報(bào)廢汽車***********析構(gòu)Wheel:201析構(gòu)Wheel:209析構(gòu)Wheel:203析構(gòu)Wheel:204析構(gòu)Motor:103析構(gòu)Car:析構(gòu)Wheel:205析構(gòu)Wheel:206析構(gòu)Wheel:207析構(gòu)Wheel:208析構(gòu)Motor:102析構(gòu)Car:***********刪除庫(kù)存中沒(méi)有使用的車輪***********析構(gòu)Wheel:210
擴(kuò)展:編寫(xiě)一些程序來(lái)專門(mén)管理內(nèi)存中的對(duì)象練習(xí)調(diào)試通過(guò)例3.6的代碼參照書(shū)中的思路,按照自己的理解重做例3.10總結(jié)及進(jìn)一步學(xué)習(xí)分析:使用組合關(guān)聯(lián)和聚合關(guān)聯(lián)描述事物的構(gòu)成設(shè)計(jì):使用關(guān)聯(lián)、連接等UML工具表示類及對(duì)象的內(nèi)部關(guān)系編碼:選用對(duì)象或指針(存儲(chǔ))實(shí)現(xiàn)組合關(guān)聯(lián)及其連接,使用代碼(邏輯)實(shí)現(xiàn)聚合關(guān)聯(lián)3.4深入理解類及其對(duì)象(映射關(guān)系)3.5字符串進(jìn)一步學(xué)習(xí)第3章關(guān)聯(lián)與連接3.2關(guān)聯(lián)的實(shí)現(xiàn)第3章關(guān)聯(lián)與連接3.4深入理解類及其對(duì)象3.5字符串學(xué)習(xí)目標(biāo)能夠運(yùn)用映射等知識(shí)解釋類及其對(duì)象的本質(zhì)能夠運(yùn)用組合關(guān)聯(lián)等知識(shí)解釋字符串的數(shù)據(jù)結(jié)構(gòu)能夠使用類、組合關(guān)聯(lián)等UML工具封裝字符串能夠使用C++代碼自定義字符串3.4深入理解類及其對(duì)象(映射關(guān)系)Students1(210101,"Randy",3.5)3.4深入理解類及其對(duì)象(映射)Students1(210101,"Randy",3.5)3.5字符串3.5.1數(shù)組中的概念及其關(guān)系3.5.2字符數(shù)組的語(yǔ)義3.5.3自定義字符串類myString3.5.1數(shù)組中的概念及其關(guān)系數(shù)組名數(shù)組元素元素類型內(nèi)存結(jié)構(gòu)邏輯結(jié)構(gòu)3.5.2字符數(shù)組的語(yǔ)義語(yǔ)義:面向應(yīng)用vs面向計(jì)算機(jī)實(shí)現(xiàn)方法:數(shù)據(jù)類型存儲(chǔ)字符數(shù)組存儲(chǔ)數(shù)組的指針3.5.2字符數(shù)組的語(yǔ)義動(dòng)態(tài)數(shù)組:存儲(chǔ)數(shù)組的指針3.5.3自定義字符串類myString封裝為類動(dòng)態(tài)數(shù)組【例3.11】字符串類myString//myString.hclass
myString{public: myString(chars[]); ~myString();
voidprint()const;
intgetLen()const;
char*getString()const; myString(const
myString&oldMyString);private:
char*ptrCharArray;
intlen;};//myString.cpp#include
"myString.h"#include
<iostream>using
namespacestd;
myString::myString(char
s[]){ len=strlen(s);
ptrCharArray=new
char[len+1]; strncpy(ptrCharArray,s,len+1); ptrCharArray[len]='\0';}myString::~myString(){
deleteptrCharArray;}void
myString::print()const{ cout<<ptrCharArray<<endl;}int
myString::getLen()const{
returnlen;}const
char*myString::getString()const{
returnptrCharArray;}myString::myString(const
myString&oldMyString){ len=oldMyString.getLen();
ptrCharArray=new
char[len+1]; strncpy(ptrCharArray,oldMyString.getString(),len+1);}【例3.12】類Person中使用類myString//Person.cpp#include
"myString.h"#include
<iostream>using
namespacestd;class
Person{public: Person(){} Person(myStringn):name(n.getString()){}
voidprint(){ cout<<"Person:"; name.print(); } Person(const
Person&oldPerson):name(oldPerson.name){}private:
myStringname;//表示到myString的組合關(guān)聯(lián)};Personfn(Person
p){
return
p;}myStringfn(myStringp){
return
p;}voidmain(){ cout<<"****創(chuàng)建myString對(duì)象****"<<endl;
myStrings1("張三"); s1.print();
myStrings2(s1); s2.print();
cout<<endl<<"****傳遞*myString對(duì)象****"<<endl;
fn(s1).print();
cout<<endl<<"****創(chuàng)建Person對(duì)象****"<<endl;
Personp1("李四"); p1.print();
Personp2(s1); p2.print();
cout<<endl<<"****傳遞*Person對(duì)象****"<<endl; fn(p1).print();
cout<<endl<<"***堆中創(chuàng)建*Person對(duì)象****"<<endl;
Person*p3=new
Person("王五"); p3->print();
cout<<"****main語(yǔ)句結(jié)束****"<<endl;}練習(xí)調(diào)試通過(guò)例3.11和3.12的代碼使用動(dòng)態(tài)數(shù)組存儲(chǔ)一個(gè)人的姓名,類Person的對(duì)象負(fù)責(zé)管理其中存儲(chǔ)的姓名,并編程實(shí)現(xiàn)??偨Y(jié)及進(jìn)一步學(xué)習(xí)分析:運(yùn)用組合關(guān)聯(lián)等知識(shí)抽象封裝字符串設(shè)計(jì):使用組合關(guān)聯(lián)及連接等UML工具描述類myString的內(nèi)部結(jié)構(gòu)編碼:使用C++編碼實(shí)現(xiàn)字符串3.6鏈表進(jìn)一步學(xué)習(xí)第3章關(guān)聯(lián)與連接3.2關(guān)聯(lián)的實(shí)現(xiàn)第3章關(guān)聯(lián)與連接3.6應(yīng)用舉例:鏈表3.5字符串學(xué)習(xí)目標(biāo)能夠運(yùn)用關(guān)聯(lián)等知識(shí)解釋鏈表的數(shù)據(jù)結(jié)構(gòu)能夠使用關(guān)聯(lián)、連接等UML工具描述鏈表的數(shù)據(jù)結(jié)構(gòu)能夠解釋封裝鏈表的思路及方法能夠使用C++編碼實(shí)現(xiàn)鏈表3.6應(yīng)用舉例:鏈表【例3.13】使用鏈表管理學(xué)生#include
"myString.h"#include
"Student.h"
#i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五美容院跨區(qū)域品牌拓展合作協(xié)議4篇
- 2025版養(yǎng)老院入住后休閑娛樂(lè)設(shè)施使用合同3篇
- 2025年度個(gè)人二手車買(mǎi)賣(mài)合同模板4篇
- 2025版雙方墊資合作知識(shí)產(chǎn)權(quán)簡(jiǎn)單協(xié)議3篇
- 二零二五年度生物制藥產(chǎn)品研發(fā)與銷售合同4篇
- 二零二五版美甲店會(huì)員積分體系合作合同4篇
- 2025版高端定制門(mén)窗設(shè)計(jì)加工合作協(xié)議4篇
- 2025年度綠色生態(tài)面料生產(chǎn)加工合作合同4篇
- 個(gè)人委托培訓(xùn)合同書(shū)2024年版范例版B版
- 2025年度冷庫(kù)設(shè)施設(shè)備租賃及維護(hù)合同4篇
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2024-2025學(xué)年八年級(jí)上學(xué)期1月期末物理試題(含答案)
- 商場(chǎng)電氣設(shè)備維護(hù)勞務(wù)合同
- 2023年國(guó)家公務(wù)員錄用考試《行測(cè)》真題(行政執(zhí)法)及答案解析
- 2024智慧醫(yī)療數(shù)據(jù)字典標(biāo)準(zhǔn)值域代碼
- 年產(chǎn)12萬(wàn)噸裝配式智能鋼結(jié)構(gòu)項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)備案
- 【獨(dú)家揭秘】2024年企業(yè)微信年費(fèi)全解析:9大行業(yè)收費(fèi)標(biāo)準(zhǔn)一覽
- 醫(yī)療器械經(jīng)銷商會(huì)議
- 《±1100kV特高壓直流換流變壓器使用技術(shù)條件》
- 《風(fēng)電場(chǎng)項(xiàng)目經(jīng)濟(jì)評(píng)價(jià)規(guī)范》(NB-T 31085-2016)
- 五年級(jí)上冊(cè)脫式計(jì)算100題及答案
評(píng)論
0/150
提交評(píng)論