/*類和對(duì)象
1.類和實(shí)例化定義類聲明類定義成員函數(shù)數(shù)據(jù)成員的賦值使用類的對(duì)象。
2.構(gòu)造函數(shù)數(shù)據(jù)封裝默認(rèn)構(gòu)造函數(shù)定義構(gòu)造函數(shù)構(gòu)造函數(shù)和元運(yùn)算符new構(gòu)造函數(shù)的默認(rèn)參數(shù)
復(fù)制構(gòu)造函數(shù)析構(gòu)函數(shù)和運(yùn)算符delete默認(rèn)析構(gòu)函數(shù)調(diào)用復(fù)制構(gòu)造函數(shù)的綜合實(shí)例。
3.成員函數(shù)的重載及默認(rèn)參數(shù)
4.this指針
5.一個(gè)類的對(duì)象作為另一個(gè)類的成員
6.類和對(duì)象的性質(zhì)(空類類作用域)
7.標(biāo)記圖UML標(biāo)記圖
8。編譯指令嵌入指令宏定義條件編譯指令define操作符
9.條件編譯。
作業(yè)題、、
*/
/*4.8類和對(duì)象的性質(zhì)
對(duì)象的性質(zhì):
1.同一個(gè)類的對(duì)象直接可以相互賦值,Point A,B;B=A;
2.可使用對(duì)象數(shù)組。Point A[3];
3.可使用指向?qū)ο蟮闹羔槪褂萌〉刂?amp;講一個(gè)對(duì)象的地址至于這個(gè)指針中。Point * p=&A
p->Display();
4.對(duì)象可以用作函數(shù)參數(shù),
1.如果參數(shù)傳遞采用傳對(duì)象值的方式如果參數(shù)傳遞采用傳對(duì)象值的方式
在被調(diào)用函數(shù)中對(duì)形參所作的改變不影響調(diào)用函數(shù)中作為實(shí)參的對(duì)象。
2.如果傳的是對(duì)象的引用當(dāng)參數(shù)對(duì)象被修改時(shí),相應(yīng)的實(shí)參也將被修改。
3.如果傳值是對(duì)象的地址值,可以使用對(duì)象指針作為函數(shù)參數(shù),為了避免被調(diào)用函數(shù)修改原來對(duì)象的數(shù)據(jù)成員可以使用const修飾符。
5.對(duì)象可以作為函數(shù)的參數(shù)。可以使用對(duì)象,對(duì)象引用和對(duì)象指針。
6.一個(gè)對(duì)象可以用作另一個(gè)類的成員
類的性質(zhì):
1.類本身的成員函數(shù)可以使用類的所有成員私有和共有成員。
2.類的對(duì)象只能訪問共有成員函數(shù)
3.其他函數(shù)不能使用類的私有成員。也不能使用使用
4.雖然一個(gè)類可以包含另外一個(gè)類的對(duì)象但這個(gè)類也只能通過被包含的對(duì)象使用哪個(gè)類
2.不完全的類聲明。
class MemberOnaly;//不完全的類聲明
MemberOnaly * cludb;
3.空類
盡管類的目的是封裝和數(shù)據(jù)他可以產(chǎn)生空類對(duì)象。
class Empty{
}
沒有聲明行為但是可以產(chǎn)生空類的對(duì)象。
4.類作用域
{}花括號(hào)里面
4.9面向?qū)ο蟮臉?biāo)記圖
類和對(duì)象的UML標(biāo)記圖。
OOP面向?qū)ο?/p>
OOA面向?qū)ο蠓治?/p>
OOD面向?qū)ο笤O(shè)計(jì)。
對(duì)象的結(jié)構(gòu)與連接:
對(duì)象結(jié)構(gòu)是指對(duì)象之間的分類(繼承)和組合(聚合)關(guān)系稱為關(guān)聯(lián)關(guān)系。
對(duì)象之間的靜態(tài)關(guān)系是通過對(duì)象屬性之間的連接反應(yīng)的稱為實(shí)例連接
對(duì)象行為之間的動(dòng)態(tài)關(guān)系是通過對(duì)象行為之間的依賴關(guān)系表現(xiàn)稱之為消息連接。
消息連接和實(shí)例統(tǒng)稱為連接。
使用實(shí)例
4.9.4
1有一個(gè)狀態(tài),由與其關(guān)聯(lián)的屬性值結(jié)合所表征。
2.有唯一標(biāo)識(shí)名,可以qu
2.有唯一標(biāo)示名,每個(gè)操作決定對(duì)象的一種行為。
3.對(duì)象的狀態(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.類名重載一個(gè)
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運(yùn)算符動(dòng)態(tài)產(chǎn)生類的對(duì)象時(shí),new運(yùn)算符也是自動(dòng)調(diào)用構(gòu)造函數(shù)、
三,改錯(cuò)題
return m.
2.最后一個(gè)沒有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一個(gè)類的對(duì)象作為另一個(gè)類的成員
#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è)計(jì)一個(gè)點(diǎn)類Point再設(shè)計(jì)一個(gè)矩形類。矩形類使用Point類的兩個(gè)坐標(biāo)點(diǎn)作為矩形的對(duì)角訂單,并可以輸出4個(gè)坐標(biāo)值和面積,使用測試程序驗(yàn)證程序。
2.使用內(nèi)聯(lián)函數(shù)設(shè)計(jì)一個(gè)類,用來表示指教坐標(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è)計(jì)一個(gè)類,用來表示指教坐標(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è)計(jì)一個(gè)點(diǎn)類Point再設(shè)計(jì)一個(gè)矩形類。矩形類使用Point類的兩個(gè)坐標(biāo)點(diǎn)作為矩形的對(duì)角訂單,并可以輸出4個(gè)坐標(biāo)值和面積,使用測試程序驗(yàn)證程序。
#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];//聲明類的對(duì)象數(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ù)的綜合實(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ù)和運(yùn)算符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<<"自動(dòng)調(diào)用析構(gòu)函數(shù)"
}
voidmain()
{
Point A(3,4);
cout<<"main"<
}
*/
/*4.5使用前面定義的Point類演示全局對(duì)象的例子
構(gòu)造函數(shù)和運(yùn)算符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運(yùn)算符和構(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ù)和元運(yùn)算符new構(gòu)造函數(shù)的默認(rèn)參數(shù)
復(fù)制構(gòu)造函數(shù)析構(gòu)函數(shù)和運(yùn)算符delete默認(rèn)析構(gòu)函數(shù)調(diào)用復(fù)制構(gòu)造函數(shù)的綜合實(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)生對(duì)象A
Point B(15,25);//使用帶參數(shù)的構(gòu)造函數(shù)產(chǎn)生對(duì)象B
Point C[2];//使用不帶參數(shù)的構(gòu)造函數(shù)產(chǎn)生對(duì)象數(shù)據(jù)C
Point D[2]={Point(5,7),Point(8,12)}; //使用帶參數(shù)的構(gòu)造函數(shù)產(chǎn)生對(duì)象數(shù)組D
}
*/
/* 1.類和實(shí)例化定義類聲明類定義成員函數(shù)數(shù)據(jù)成員的賦值使用類的對(duì)象
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ù)成員賦值*/
/*使用類的對(duì)象
Point A,B;Point *p=&A; Point &R=B;
*/
/*4.2根據(jù)Point的定義演示使用Point類的對(duì)象
#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<
}
//對(duì)象指針名->運(yùn)算符訪問對(duì)象的成員對(duì)象指針名->對(duì)象成員名
*/
/*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;
}
*/