/*類和對象
1.類和實例化定義類聲明類定義成員函數(shù)數(shù)據(jù)成員的賦值使用類的對象。
2.構(gòu)造函數(shù)數(shù)據(jù)封裝默認(rèn)構(gòu)造函數(shù)定義構(gòu)造函數(shù)構(gòu)造函數(shù)和元運算符new構(gòu)造函數(shù)的默認(rèn)參數(shù)
復(fù)制構(gòu)造函數(shù)析構(gòu)函數(shù)和運算符delete默認(rèn)析構(gòu)函數(shù)調(diào)用復(fù)制構(gòu)造函數(shù)的綜合實例旬昭。
3.成員函數(shù)的重載及默認(rèn)參數(shù)
4.this指針
5.一個類的對象作為另一個類的成員
6.類和對象的性質(zhì)(空類類作用域)
7.標(biāo)記圖UML標(biāo)記圖
8巍膘。編譯指令嵌入指令宏定義條件編譯指令define操作符
9.條件編譯蒲讯。
作業(yè)題并炮、鞠值、
*/
/*4.8類和對象的性質(zhì)
對象的性質(zhì):
1.同一個類的對象直接可以相互賦值矿辽,Point A,B;B=A;
2.可使用對象數(shù)組钉赁。Point A[3];
3.可使用指向?qū)ο蟮闹羔樚阊辏褂萌〉刂?amp;講一個對象的地址至于這個指針中。Point * p=&A
p->Display();
4.對象可以用作函數(shù)參數(shù)你踩,
1.如果參數(shù)傳遞采用傳對象值的方式如果參數(shù)傳遞采用傳對象值的方式
在被調(diào)用函數(shù)中對形參所作的改變不影響調(diào)用函數(shù)中作為實參的對象诅岩。
2.如果傳的是對象的引用當(dāng)參數(shù)對象被修改時,相應(yīng)的實參也將被修改姓蜂。
3.如果傳值是對象的地址值按厘,可以使用對象指針作為函數(shù)參數(shù),為了避免被調(diào)用函數(shù)修改原來對象的數(shù)據(jù)成員可以使用const修飾符钱慢。
5.對象可以作為函數(shù)的參數(shù)逮京。可以使用對象束莫,對象引用和對象指針懒棉。
6.一個對象可以用作另一個類的成員
類的性質(zhì):
1.類本身的成員函數(shù)可以使用類的所有成員私有和共有成員草描。
2.類的對象只能訪問共有成員函數(shù)
3.其他函數(shù)不能使用類的私有成員。也不能使用使用
4.雖然一個類可以包含另外一個類的對象但這個類也只能通過被包含的對象使用哪個類
2.不完全的類聲明策严。
class MemberOnaly;//不完全的類聲明
MemberOnaly * cludb;
3.空類
盡管類的目的是封裝和數(shù)據(jù)他可以產(chǎn)生空類對象穗慕。
class Empty{
}
沒有聲明行為但是可以產(chǎn)生空類的對象。
4.類作用域
{}花括號里面
4.9面向?qū)ο蟮臉?biāo)記圖
類和對象的UML標(biāo)記圖妻导。
OOP面向?qū)ο?/p>
OOA面向?qū)ο蠓治?/p>
OOD面向?qū)ο笤O(shè)計逛绵。
對象的結(jié)構(gòu)與連接:
對象結(jié)構(gòu)是指對象之間的分類(繼承)和組合(聚合)關(guān)系稱為關(guān)聯(lián)關(guān)系。
對象之間的靜態(tài)關(guān)系是通過對象屬性之間的連接反應(yīng)的稱為實例連接
對象行為之間的動態(tài)關(guān)系是通過對象行為之間的依賴關(guān)系表現(xiàn)稱之為消息連接倔韭。
消息連接和實例統(tǒng)稱為連接术浪。
使用實例
4.9.4
1有一個狀態(tài),由與其關(guān)聯(lián)的屬性值結(jié)合所表征寿酌。
2.有唯一標(biāo)識名胰苏,可以qu
2.有唯一標(biāo)示名,每個操作決定對象的一種行為醇疼。
3.對象的狀態(tài)只能被自己的行為所改變
編譯指令C++的源程序可包含各種編譯指令
1.嵌入指令#include
2.宏定義
#define
3.條件編譯指令
4硕并。#define操作符
#ifdef head
#define head
#endif
*/
//#if !defined(i)
//#define i//前兩句是什么意思啊秧荆?倔毙?
//#else
/*作業(yè)題
1.數(shù)據(jù)成員和成員函數(shù)。
2.類名重載一個
3.fun:fun(fun &)
fun:fun(const fun &)
二辰如。選擇題
1.class是能封裝C++的關(guān)鍵字
2.C
3. Point::~Point()
4普监,B
5.C
6.C
7.D當(dāng)用new運算符動態(tài)產(chǎn)生類的對象時,new運算符也是自動調(diào)用構(gòu)造函數(shù)琉兜、
三,改錯題
return m.
2.最后一個沒有return
3完成程序題
1毙玻,
#include
using namespace std;
class base
{
private:
int x,y;
public:
void print();
voidinit(int,int);
};
void base::init(int a, int b)
{
x=a;
y=b;
}
void base::print()
{
cout<
}
int main()
{
base a;
a.init(68,66);
a.print();
}
2.完成下面類中的長遠(yuǎn)函數(shù)的定義
#include
using namespace std;
class Point{
private:
int m,n;
public:
Point (int,int);
Point(Point &);
};
Point::Point(int a,int b)
{
m=a;
n=b;
cout<
}
Point ::Point(Point &t)
{
m=t.m;
n=t.n;
cout<
}
int main()
{
Point C(12,324);
Point D(C);
}
*/
/*4.7一個類的對象作為另一個類的成員
#include
using namespace std;
class Point{
int x,y;
public:
void set(int a,int b)
{
x=a;
y=b;
}
int GetX()
{
return x;
}
int GetY()
{
return y;
}
};
class Rectangle{
Point Loc;
intH,W;
public:
void set(int x,int y,int h,int w);
Point * getLoc();
int getHeight(){
return H;
}
int getWeight()
{
return W;
}
};
void Rectangle::set(int x, int y, int h, int w)
{
Loc.set(x, y);
H=h;W=w;
}
Point * Rectangle::getLoc(){
return &Loc;
}
int main()
{
Rectangle rect;
rect.set(10, 10, 25, 30);
cout<
Point * p=rect.getLoc();
cout<GetX()<<"---"<GetY();
}
五程序分析題一
#include
using namespace std;
class base{
private:
int a,b;
public:
~base(){
cout<<"析構(gòu)函數(shù)"<
}
base (int a,int b)
{
cout<<"初始化"<
}
};
int main()
{
base(12, 12);
}
五程序分析題二
#include
using namespace std;
class base{
private:
int x;
public:
void setx(int a){
x=a;
}
int getx()
{
return x;
}
};
int main()
{
int * p;
base a;
a.setx(55);
p=new int(a.getx());
cout<<*p;
}
六編程題
1.設(shè)計一個點類Point再設(shè)計一個矩形類豌蟋。矩形類使用Point類的兩個坐標(biāo)點作為矩形的對角訂單,并可以輸出4個坐標(biāo)值和面積桑滩,使用測試程序驗證程序梧疲。
2.使用內(nèi)聯(lián)函數(shù)設(shè)計一個類,用來表示指教坐標(biāo)系中的任意一條直線并輸出它的屬性运准。
七幌氮。作圖題
1.假設(shè)不涉及操作,已經(jīng)定義了類line使用繼承的方法組成Rectangle類胁澳。
2.假設(shè)不涉及操作该互,已經(jīng)定義了類Line使用聚合的方法組成Rectangle類。
*/
/*七作圖題
1.假設(shè)不涉及操作韭畸,已經(jīng)定義了類line使用繼承的方法組成Rectangle類宇智。
*/
/*七作圖題
2.假設(shè)不涉及操作蔓搞,已經(jīng)定義了類Line使用聚合的方法組成Rectangle類。
*/
/* 2.使用內(nèi)聯(lián)函數(shù)設(shè)計一個類随橘,用來表示指教坐標(biāo)系中的任意一條直線并輸出它的屬性喂分。
#include
#include
using namespace std;
class LineS{
private:
int x,y,x2,y2;
public:
LineS();
LineS(int =0,int=0,int =0,int =0);
void printPoint();
double getLength();
};
LineS::LineS(int a,int b,int c,int d)
{
x=a;
}
inline void LineS::printPoint()
{
cout<
cout<
}
inline double LineS::getLength()
{
double length;
length=sqrt((x2-x)*(x2-x)+(y2-y)*(y2-y));
return length;
}
int main()
{
LineS line(10,80,-10,12);
line.printPoint();
cout<
}
*/
/* 1.設(shè)計一個點類Point再設(shè)計一個矩形類。矩形類使用Point類的兩個坐標(biāo)點作為矩形的對角訂單机蔗,并可以輸出4個坐標(biāo)值和面積蒲祈,使用測試程序驗證程序。
#include
using namespace std;
class Point
{
private:
int x, y;
public:
Point()
{
x=0;
y=0;
}
Point(int a,int b)
{
x=a;
y=b;
}
void setXY(int a,int b)
{
x=a;
y=b;
}
int getX()
{
return x;
}
int getY()
{
return y;
}
};
class Rectangele//矩形
{
private:
Point point1,point2,point3,point4;
public:
Rectangele();
void init()
{
point2.setXY(point4.getX(), point1.getY());
point3.setXY(point1.getX(), point4.getY());
}
Rectangele(Point one,Point two)
{
point1=one;
point4=two;
init();
}
Rectangele(int x1,int y1,int x2,int y2)
{
point1.setXY(x1, y1);
point4.setXY(x2, y2);
init();
}
void printPoint()
{
cout<<"A"<
cout<<"B"<
cout<<"C"<
cout<<"D"<
}
int getArea()
{
int height,width,area;
height =point1.getY()-point3.getY();
width=point1.getX()-point2.getX();
area=height* width;
if (area>0) {
return area;
}
else
{
return -area;
}
}
};
int main()
{
Point p1(-15,56),p2(89,-10);
Rectangele r1(p1,p2);
Rectangele r2(1,5,5,1);
cout<<"矩形"<
r1.printPoint();
cout<<"矩形r1的面積"<
r2.printPoint();
cout<<"矩形的面積"<
}
*/
/*4.6this指針隱藏著的this
void Point::setxy(int a,int b,(Point *)this)
{
this->x=a;
this->y=b;
}
*/
/*4.5成員函數(shù)重載以及默認(rèn)參數(shù)
class MAX{
private:
int a,b,c,d;
int maxi(int,int);
public:
void Set(int,int,int,int);
int maxi();
}A[3];//聲明類的對象數(shù)組萝嘁,定義結(jié)束
int MAX::maxi(int x, int y)
{
return (x>y)?x:y;
}
void MAX::Set(int x1=0, int x2=0, int x3=0, int x4=0)
{
a=x1;
b=x2;
c=x3;
d=x4;
}
int MAX::maxi(){
int x=maxi(a, b);
int y=maxi(c, d);
return maxi(x, y);
}
#include
using namespace std;
int main()
{
A[0].Set(12, 23, 45, 56);
A[1].Set(12, 45, 79);
A[2].Set(12, 45);
for (int i=0; i<3; i++) {
cout<
}
}
*/
/*默認(rèn)析構(gòu)函數(shù)
Point::~Point()
調(diào)用復(fù)制函數(shù)的綜合實例
#include
using namespace std;
class Point{
private:
int x,y;
public:
Point(int a=0,int b=0)
{
x=a;y=b;cout<<"構(gòu)造函數(shù)"<
}
Point (const Point &p);
int Getx(){
return x;
}
int GetY(){
return y;
}
void show()
{
cout<
}
~Point()
{
cout<<"delete"<
}
};
Point::Point(const Point &p)
{
x=p.x;
y=p.y;
cout<<"copy"<
}
void display(Point p)
{
p.show();
}
void disp(Point &p)
{
p.show();
}
Point fun()
{
Point A(101,23);
return A;
}
int main()
{
Point A(42,35);
Point B(A);
Point C(58,95);
cout<<"dispaly(b)"<
display(B);
cout<<"dis(b)"<
disp(B);
cout<<"fun "<
C=fun();
cout<<"DSA"<
disp(C);
}
*/
/*析構(gòu)函數(shù)和運算符delete
#include
using namespace std;
class Point
{
private:
int x,y;
public:
Point(int=0,int =0);
~Point();
};
Point::Point(int a,int b):x(a),y(b)
{
cout<
}
Point::~Point()
{
cout<<"默認(rèn)"<
}
int main()
{
Point * p=new Point[2];
delete []p;
}
*/
/*4.7構(gòu)造函數(shù)的默認(rèn)參數(shù)
#include
using namespace std;
class Point {
private:
int x,y;
public:
Point(int=0,int =0);
};
Point::Point(int a,int b):x(a),y(b){
cout<<"構(gòu)造函數(shù)"<
}
int main()
{
Point A;
Point B(15,24);
Point c[2];
}
*/
/*4.2.5復(fù)制構(gòu)造函數(shù)
A::A(A&)
A::A(const A&)
Point (Point& t)
*/
/*析構(gòu)函數(shù)
定義析構(gòu)函數(shù)
~Point()
{
cout<<"自動調(diào)用析構(gòu)函數(shù)"
}
voidmain()
{
Point A(3,4);
cout<<"main"<
}
*/
/*4.5使用前面定義的Point類演示全局對象的例子
構(gòu)造函數(shù)和運算符new
4.6
#include
using namespace std;
class Point{
private:
int x,y;
public:
Point();
Point(int,int);
};
Point::Point():x(0),y(0)
{
cout<<"默認(rèn)"<
}
Point::Point(int a,int b):x(a),y(b)
{
cout<
}
int main()
{
//演示new運算符和構(gòu)造函數(shù)的關(guān)系讳嘱。
Point * p=new Point;
Point * p2=new Point(5,7);
delete p;
delete p2;
return 0;
}
*/
/* 2.構(gòu)造函數(shù)數(shù)據(jù)封裝默認(rèn)構(gòu)造函數(shù)定義構(gòu)造函數(shù)構(gòu)造函數(shù)和元運算符new構(gòu)造函數(shù)的默認(rèn)參數(shù)
復(fù)制構(gòu)造函數(shù)析構(gòu)函數(shù)和運算符delete默認(rèn)析構(gòu)函數(shù)調(diào)用復(fù)制構(gòu)造函數(shù)的綜合實例。*/
/*默認(rèn)構(gòu)造函數(shù)Point::Point()*/
/*定義構(gòu)造函數(shù)
#include
using namespace std;
class Point{
private:
int x,y;
public:
Point();
Point(int,int);
};
Point::Point():x(0),y(0)
{
cout<<"默認(rèn)"<
}
Point::Point(int a,int b):x(a),y(b)
{
cout<
}
int main()
{
Point A;//使用不帶參數(shù)的構(gòu)造函數(shù)產(chǎn)生對象A
Point B(15,25);//使用帶參數(shù)的構(gòu)造函數(shù)產(chǎn)生對象B
Point C[2];//使用不帶參數(shù)的構(gòu)造函數(shù)產(chǎn)生對象數(shù)據(jù)C
Point D[2]={Point(5,7),Point(8,12)}; //使用帶參數(shù)的構(gòu)造函數(shù)產(chǎn)生對象數(shù)組D
}
*/
/* 1.類和實例化定義類聲明類定義成員函數(shù)數(shù)據(jù)成員的賦值使用類的對象
class類名{
private:私有數(shù)據(jù)和函數(shù)
public:共有數(shù)據(jù)和函數(shù)
protected:保護(hù)數(shù)據(jù)和函數(shù)
}
4.1
class Point{
private:
int x,y;
public:
void setXy(int a,int b);
void Move(int a,int b);
};
2定義成員函數(shù)
酿愧。*/
//void Point::setXy(int a,int b)
//{
//x=a;y=b;
//}
/*內(nèi)聯(lián)函數(shù)
inline int Point::Getx()
{
return x;
}
*/
//數(shù)據(jù)成員的賦值
/*數(shù)據(jù)成員的復(fù)制不能在類內(nèi)給數(shù)據(jù)成員賦值*/
/*使用類的對象
Point A,B;Point *p=&A; Point &R=B;
*/
/*4.2根據(jù)Point的定義演示使用Point類的對象
#include
using namespace std;
class Point{
private:
int x,y;
public:
void setXy(int a,int b);
void Move(int a,int b);
void Display();
};
void Point::setXy(int a,int b)
{
x=a;y=b;
}
void Point::Display()
{
cout<
}
//對象指針名->運算符訪問對象的成員對象指針名->對象成員名
*/
/*4.3例子Point
#include
using namespace std;
class Point
{
private:
int x,y;
public:
void setXY(inta,int b)
{
x=a;y=b;
}
void Move(int &a,int &b)
{
x=x+a;
y=y+b;
}
void Display()
{
cout<
}
int Getx()
{
return x;
}
int GetY()
{
return y;
}
};
void print (Point * a)
{
a->Display();
}
void print(Point &a)
{
a.Display();
}
int main()
{
Point A,B,*p;
Point &RA=A;
int a=25;
int b=25;
A.setXY(a, b);
B=A;
p=&B;
p->Display();
int c=-80;
int d=23;
RA.Move(c,d);
print(A);
print(&A);
return 0;
}
*/