ç±»çæåå½æ°æ¯æé£äºæå®ä¹ååååå¨ç±»å®ä¹å
é¨çå½æ°ï¼å°±åç±»å®ä¹ä¸çå
¶ä»åéä¸æ ·ãç±»æåå½æ°æ¯ç±»çä¸ä¸ªæåï¼å®å¯ä»¥æä½ç±»çä»»æ对象ï¼å¯ä»¥è®¿é®å¯¹è±¡ä¸çæææåã
class Box
{
public:
double length; // é¿åº¦
double breadth; // 宽度
double height; // é«åº¦
double getVolume(void);// è¿åä½ç§¯
};
æåå½æ°å¯ä»¥å®ä¹å¨ç±»å®ä¹å
é¨ï¼æè
åç¬ä½¿ç¨èå´è§£æè¿ç®ç¬¦ :: æ¥å®ä¹ãå¨ç±»å®ä¹ä¸å®ä¹çæåå½æ°æå½æ°å£°æ为å
èçï¼å³ä¾¿æ²¡æä½¿ç¨ inline æ è¯ç¬¦ãæ以æ¨å¯ä»¥æç
§å¦ä¸æ¹å¼å®ä¹ Volume() å½æ°ï¼
class Box
{
public:
double length; // é¿åº¦
double breadth; // 宽度
double height; // é«åº¦
double getVolume(void)
{
return length * breadth * height;
}
};
æ¨ä¹å¯ä»¥å¨ç±»çå¤é¨ä½¿ç¨èå´è§£æè¿ç®ç¬¦ :: å®ä¹è¯¥å½æ°ï¼å¦ä¸æ示ï¼
double Box::getVolume(void)
{
return length * breadth * height;
}
å¨è¿éï¼éè¦å¼ºè°ä¸ç¹ï¼å¨ :: è¿ç®ç¬¦ä¹åå¿
须使ç¨ç±»åãè°ç¨æåå½æ°æ¯å¨å¯¹è±¡ä¸ä½¿ç¨ç¹è¿ç®ç¬¦ï¼.ï¼ï¼è¿æ ·å®å°±è½æä½ä¸è¯¥å¯¹è±¡ç¸å
³çæ°æ®ï¼å¦ä¸æ示ï¼
Box myBox; // å建ä¸ä¸ªå¯¹è±¡
myBox.getVolume(); // è°ç¨è¯¥å¯¹è±¡çæåå½æ°
ä¸ä¸ªç±»å¯ä»¥æå¤ä¸ª publicãprotected æ private æ è®°åºåãæ¯ä¸ªæ è®°åºåå¨ä¸ä¸ä¸ªæ è®°åºåå¼å§ä¹åæè
å¨éå°ç±»ä¸»ä½ç»æå³æ¬å·ä¹åé½æ¯ææçãæååç±»çé»è®¤è®¿é®ä¿®é¥°ç¬¦æ¯ privateã
class Base {
public:
// public members go here
protected:
// protected members go here
private:
// private members go here
};
å
¬ææåå¨ç¨åºä¸ç±»çå¤é¨æ¯å¯è®¿é®çãæ¨å¯ä»¥ä¸ä½¿ç¨ä»»ä½æåå½æ°æ¥è®¾ç½®åè·åå
¬æåéçå¼ãå°±æ¯è¯´ä½ å¯ä»¥ç´æ¥ç¨å¯¹è±¡+â.â(ç¹è¿ç®ç¬¦)çæ¹å¼æ¥ä¸ºå
¬æåéèµå¼ã
ç§ææååéæå½æ°å¨ç±»çå¤é¨æ¯ä¸å¯è®¿é®çï¼çè³æ¯ä¸å¯æ¥ççãåªæç±»ååå
å½æ°å¯ä»¥è®¿é®ç§ææåãï¼è¿ä¸ªåJavaä¸ä¸æ ·ï¼Javaç±»ä¸é»è®¤æ¯publicï¼
é»è®¤æ
åµä¸ï¼ç±»çæææåé½æ¯ç§æçã
å®é
æä½ä¸ï¼æ们ä¸è¬ä¼å¨ç§æåºåå®ä¹æ°æ®ï¼å¨å
¬æåºåå®ä¹ç¸å
³çå½æ°ï¼ä»¥ä¾¿å¨ç±»çå¤é¨ä¹å¯ä»¥è°ç¨è¿äºå½æ°ãè¿ä¸ªæ¹å¼ç¡®å®å¥½ï¼æç¹éåºå¤åçæè§ã
ä¿æ¤æååéæå½æ°ä¸ç§ææåååç¸ä¼¼ï¼ä½æä¸ç¹ä¸åï¼ä¿æ¤æåå¨æ´¾çç±»ï¼å³åç±»ï¼ä¸æ¯å¯è®¿é®çã
ä¸é¢çå®ä¾ä¸åé¢çå®ä¾ç±»ä¼¼ï¼å¨è¿é width æåå¯è¢«æ´¾çç±»
smallBox çä»»ä½æåå½æ°è®¿é®ãï¼âï¼âæä½ç¬¦ç¸å½äºç»§æ¿ï¼
#include <iostream>
using namespace std;
class Box
{
protected:
double width;
};
class SmallBox:Box // SmallBox æ¯æ´¾çç±»
{
public:
void setSmallWidth( double wid );
double getSmallWidth( void );
};
// åç±»çæåå½æ°
double SmallBox::getSmallWidth(void)
{
return width ;
}
void SmallBox::setSmallWidth( double wid )
{
width = wid;
}
// ç¨åºç主å½æ°
int main( )
{
SmallBox box;
// 使ç¨æåå½æ°è®¾ç½®å®½åº¦
box.setSmallWidth(5.0);
cout << "Width of box : "<< box.getSmallWidth() << endl;
return 0;
}
ç±»çæé å½æ°æ¯ç±»çä¸ç§ç¹æ®çæåå½æ°ï¼å®ä¼å¨æ¯æ¬¡å建类çæ°å¯¹è±¡æ¶æ§è¡ã
æé å½æ°çå称ä¸ç±»çå称æ¯å®å
¨ç¸åçï¼å¹¶ä¸ä¸ä¼è¿åä»»ä½ç±»åï¼ä¹ä¸ä¼è¿å voidãæé å½æ°å¯ç¨äºä¸ºæäºæååé设置åå§å¼ã
é»è®¤çæé å½æ°æ²¡æä»»ä½åæ°ï¼ä½å¦æéè¦ï¼æé å½æ°ä¹å¯ä»¥å¸¦æåæ°ãè¿æ ·å¨å建对象æ¶å°±ä¼ç»å¯¹è±¡èµåå§å¼ã
使ç¨åå§åå表æ¥åå§åå段ï¼
Line::Line( double len): length(len)
{
cout << "Object is being created, length = " << len << endl;
}
ä¸é¢çè¯æ³çåäºå¦ä¸è¯æ³ï¼
Line::Line( double len)
{
cout << "Object is being created, length = " << len << endl;
length = len;
}
å设æä¸ä¸ªç±» Cï¼å
·æå¤ä¸ªå段 XãYãZ çéè¦è¿è¡åå§åï¼åçå°ï¼æ¨å¯ä»¥ä½¿ç¨ä¸é¢çè¯æ³ï¼åªéè¦å¨ä¸åçå段使ç¨éå·è¿è¡åéï¼å¦ä¸æ示ï¼
C::C( double a, double b, double c): X(a), Y(b), Z(c)
{
....
}
ç±»çææå½æ°æ¯ç±»çä¸ç§ç¹æ®çæåå½æ°ï¼å®ä¼å¨æ¯æ¬¡å é¤æå建ç对象æ¶æ§è¡ã
ææå½æ°çå称ä¸ç±»çå称æ¯å®å
¨ç¸åçï¼åªæ¯å¨åé¢å äºä¸ªæ³¢æµªå·ï¼~ï¼ä½ä¸ºåç¼ï¼å®ä¸ä¼è¿åä»»ä½å¼ï¼ä¹ä¸è½å¸¦æä»»ä½åæ°ãææå½æ°æå©äºå¨è·³åºç¨åºï¼æ¯å¦å
³éæ件ãéæ¾å
åçï¼åéæ¾èµæºã
ä¸é¢çå®ä¾æå©äºæ´å¥½å°ç解ææå½æ°çæ¦å¿µï¼
#include <iostream>
using namespace std;
class Line
{
public:
void setLength( double len );
double getLength( void );
Line(); // è¿æ¯æé å½æ°å£°æ
~Line(); // è¿æ¯ææå½æ°å£°æ
private:
double length;
};
// æåå½æ°å®ä¹ï¼å
æ¬æé å½æ°
Line::Line(void)
{
cout << "Object is being created" << endl;
}
Line::~Line(void)
{
cout << "Object is being deleted" << endl;
}
void Line::setLength( double len )
{
length = len;
}
double Line::getLength( void )
{
return length;
}
// ç¨åºç主å½æ°
int main( )
{
Line line;
// 设置é¿åº¦
line.setLength(6.0);
cout << "Length of line : " << line.getLength() <<endl;
return 0;
}
å½ä¸é¢ç代ç 被ç¼è¯åæ§è¡æ¶ï¼å®ä¼äº§çä¸åç»æï¼
Object is being created
Length of line : 6
Object is being deleted
å¯è§æé å½æ°ä¸ææå½æ°è¡¨é¢ä¸æ¯ä¸ä¸ªâ~âçå·®å«ï¼å
¶å®ä½ç¨æ°æ°ç¸åï¼ä¸ä¸ªçæï¼ä¸ä¸ªåæ¶ã
æ·è´æé å½æ°æ¯ä¸ç§ç¹æ®çæé å½æ°ï¼å®å¨å建对象æ¶ï¼æ¯ä½¿ç¨åä¸ç±»ä¸ä¹åå建ç对象æ¥åå§åæ°å建ç对象ãæ·è´æé å½æ°é常ç¨äºï¼
3.æ·è´æé å½æ°è°ç¨çä¸ç§å½¢å¼
3.1ï¼ä¸ä¸ªå¯¹è±¡ä½ä¸ºå½æ°åæ°ï¼ä»¥å¼ä¼ éçæ¹å¼ä¼ å
¥å½æ°ä½ï¼
3.2ï¼ä¸ä¸ªå¯¹è±¡ä½ä¸ºå½æ°è¿åå¼ï¼ä»¥å¼ä¼ éçæ¹å¼ä»å½æ°è¿åï¼
3.3ï¼ä¸ä¸ªå¯¹è±¡ç¨äºç»å¦å¤ä¸ä¸ªå¯¹è±¡è¿è¡åå§åï¼å¸¸ç§°ä¸ºå¤å¶åå§åï¼ã
æ»ç»ï¼å½æ对象æ¯æå¼ä¼ éæ¶ï¼æ 论æ¯ä½ä¸ºå½æ°åæ°ï¼è¿æ¯ä½ä¸ºå½æ°è¿åå¼ï¼ï¼ç¼è¯å¨é½ä¼å
建ç«ä¸ä¸ªæ¤å¯¹è±¡ç临æ¶æ·è´ï¼èå¨å»ºç«è¯¥ä¸´æ¶æ·è´æ¶å°±ä¼è°ç¨ç±»çæ·è´æé å½æ°ã
å¦æå¨ç±»ä¸æ²¡æå®ä¹æ·è´æé å½æ°ï¼ç¼è¯å¨ä¼èªè¡å®ä¹ä¸ä¸ªãå¦æ类带ææéåéï¼å¹¶æå¨æå
ååé
ï¼åå®å¿
é¡»æä¸ä¸ªæ·è´æé å½æ°ã该æé å½æ°å®æ对象ä¹é´çä½æ·è´ãï¼ä½æ·è´å称æµ
æ·è´ï¼åé¢å°è¿è¡è¯´æãï¼èªå®ä¹æ·è´æé å½æ°æ¯ä¸ç§è¯å¥½çç¼ç¨é£æ ¼ï¼å®å¯ä»¥é»æ¢ç¼è¯å¨å½¢æé»è®¤çæ·è´æé å½æ°ï¼æé«æºç æçãæ·è´æé å½æ°çæ常è§å½¢å¼å¦ä¸ï¼
classname (const classname &obj) {
// æé å½æ°ç主ä½
}
å¨è¿éï¼obj æ¯ä¸ä¸ªå¯¹è±¡å¼ç¨ï¼è¯¥å¯¹è±¡æ¯ç¨äºåå§åå¦ä¸ä¸ªå¯¹è±¡çã
å¨æäºç¶åµä¸ï¼ç±»å
æååééè¦å¨æå¼è¾å å
åï¼å¦æå®è¡ä½æ·è´ï¼ä¹å°±æ¯æ对象éçå¼å®å
¨å¤å¶ç»å¦ä¸ä¸ªå¯¹è±¡ï¼å¦A=Bãè¿æ¶ï¼å¦æBä¸æä¸ä¸ªæååéæéå·²ç»ç³è¯·äºå
åï¼é£Aä¸çé£ä¸ªæååéä¹æååä¸åå
åãè¿å°±åºç°äºé®é¢ï¼å½Bæå
åéæ¾äºï¼å¦ï¼ææï¼ï¼è¿æ¶Aå
çæéå°±æ¯éæéäºï¼åºç°è¿è¡é误ãäºå®ä¸è¿å°±è¦ç¨å°æ·±æ·è´äºï¼è¦èªå®ä¹æ·è´æé å½æ°ã(è¿ä¸æ®µå
¶å®å¾å¥½ç解)
æ·±æ·è´åæµ
æ·è´å¯ä»¥ç®åç解为ï¼å¦æä¸ä¸ªç±»æ¥æèµæºï¼å½è¿ä¸ªç±»ç对象åçå¤å¶è¿ç¨çæ¶åï¼èµæºéæ°åé
ï¼è¿ä¸ªè¿ç¨å°±æ¯æ·±æ·è´ï¼åä¹ï¼æ²¡æéæ°åé
èµæºï¼å°±æ¯æµ
æ·è´
æµ
æ·è´èµæºåå¨éæ¾èµæºçæ¶åä¼äº§çèµæºå½å±ä¸æ¸
çæ
åµå¯¼è´ç¨åºè¿è¡åºéãä¸å®è¦æ³¨æç±»ä¸æ¯å¦åå¨æéæåã
åå
å½æ°å¹¶ä¸æ¯æåå½æ°ãåå
å¯ä»¥æ¯ä¸ä¸ªå½æ°ï¼è¯¥å½æ°è¢«ç§°ä¸ºåå
å½æ°ï¼åå
ä¹å¯ä»¥æ¯ä¸ä¸ªç±»ï¼è¯¥ç±»è¢«ç§°ä¸ºåå
ç±»ï¼å¨è¿ç§æ
åµä¸ï¼æ´ä¸ªç±»åå
¶æææåé½æ¯åå
ã
å¦æè¦å£°æå½æ°ä¸ºä¸ä¸ªç±»çåå
ï¼éè¦å¨ç±»å®ä¹ä¸è¯¥å½æ°ååå使ç¨å
³é®å friendï¼å¦ä¸æ示ï¼
class Box
{
double width;
public:
double length;
friend void printWidth( Box box );
void setWidth( double wid );
};
声æç±» ClassTwo çæææåå½æ°ä½ä¸ºç±» ClassOne çåå
ï¼éè¦å¨ç±» ClassOne çå®ä¹ä¸æ¾ç½®å¦ä¸å£°æï¼
friend class ClassTwo;
C++ å
èå½æ°æ¯é常ä¸ç±»ä¸èµ·ä½¿ç¨ãå¦æä¸ä¸ªå½æ°æ¯å
èçï¼é£ä¹å¨ç¼è¯æ¶ï¼ç¼è¯å¨ä¼æ该å½æ°ç代ç å¯æ¬æ¾ç½®å¨æ¯ä¸ªè°ç¨è¯¥å½æ°çå°æ¹ã
对å
èå½æ°è¿è¡ä»»ä½ä¿®æ¹ï¼é½éè¦éæ°ç¼è¯å½æ°çææ客æ·ç«¯ï¼å 为ç¼è¯å¨éè¦éæ°æ´æ¢ä¸æ¬¡ææç代ç ï¼å¦åå°ä¼ç»§ç»ä½¿ç¨æ§çå½æ°ã
å¦ææ³æä¸ä¸ªå½æ°å®ä¹ä¸ºå
èå½æ°ï¼åéè¦å¨å½æ°ååé¢æ¾ç½®å
³é®å inlineï¼å¨è°ç¨å½æ°ä¹åéè¦å¯¹å½æ°è¿è¡å®ä¹ãå¦æå·²å®ä¹çå½æ°å¤äºä¸è¡ï¼ç¼è¯å¨ä¼å¿½ç¥ inline éå®ç¬¦ã
å¨ç±»å®ä¹ä¸çå®ä¹çå½æ°é½æ¯å
èå½æ°ï¼å³ä½¿æ²¡æä½¿ç¨ inline 说æ符ã
ä¸ä¸ªæå C++ ç±»çæéä¸æåç»æçæé类似ï¼è®¿é®æåç±»çæéçæåï¼éè¦ä½¿ç¨æå访é®è¿ç®ç¬¦ ->ï¼å°±å访é®æåç»æçæéä¸æ ·ãä¸ææçæéä¸æ ·ï¼æ¨å¿
é¡»å¨ä½¿ç¨æéä¹åï¼å¯¹æéè¿è¡åå§åã
æ们å¯ä»¥ä½¿ç¨ static å
³é®åæ¥æç±»æåå®ä¹ä¸ºéæçãå½æ们声æç±»çæå为éææ¶ï¼è¿æå³çæ 论å建å¤å°ä¸ªç±»ç对象ï¼éææåé½åªæä¸ä¸ªå¯æ¬ã
éææåå¨ç±»çææ对象ä¸æ¯å
±äº«çãå¦æä¸åå¨å
¶ä»çåå§åè¯å¥ï¼å¨å建第ä¸ä¸ªå¯¹è±¡æ¶ï¼ææçéææ°æ®é½ä¼è¢«åå§å为é¶ãæ们ä¸è½æéææåæ¾ç½®å¨ç±»çå®ä¹ä¸ï¼ä½æ¯å¯ä»¥å¨ç±»çå¤é¨éè¿ä½¿ç¨èå´è§£æè¿ç®ç¬¦ :: æ¥éæ°å£°æéæåéä»è对å®è¿è¡åå§åï¼å¦ä¸é¢çå®ä¾æ示ã
ä¸é¢çå®ä¾æå©äºæ´å¥½å°ç解éææ°æ®æåçæ¦å¿µï¼
#include <iostream>
using namespace std;
class Box
{
public:
static int objectCount;
// æé å½æ°å®ä¹
Box(double l=2.0, double b=2.0, double h=2.0)
{
cout <<"Constructor called." << endl;
length = l;
breadth = b;
height = h;
// æ¯æ¬¡å建对象æ¶å¢å 1
objectCount++;
}
double Volume()
{
return length * breadth * height;
}
private:
double length; // é¿åº¦
double breadth; // 宽度
double height; // é«åº¦
};
// åå§åç±» Box çéææå
int Box::objectCount = 0;
int main(void)
{
Box Box1(3.3, 1.2, 1.5); // 声æ box1
Box Box2(8.5, 6.0, 2.0); // 声æ box2
// è¾åºå¯¹è±¡çæ»æ°
cout << "Total objects: " << Box::objectCount << endl;
return 0;
}
å½ä¸é¢ç代ç 被ç¼è¯åæ§è¡æ¶ï¼å®ä¼äº§çä¸åç»æï¼
Constructor called.
Constructor called.
Total objects: 2
å¦ææå½æ°æå声æ为éæçï¼å°±å¯ä»¥æå½æ°ä¸ç±»çä»»ä½ç¹å®å¯¹è±¡ç¬ç«å¼æ¥ãéææåå½æ°å³ä½¿å¨ç±»å¯¹è±¡ä¸åå¨çæ
åµä¸ä¹è½è¢«è°ç¨ï¼éæå½æ°åªè¦ä½¿ç¨ç±»åå èå´è§£æè¿ç®ç¬¦ :: å°±å¯ä»¥è®¿é®ã
éææåå½æ°åªè½è®¿é®éææ°æ®æåï¼ä¸è½è®¿é®å
¶ä»éææåå½æ°åç±»å¤é¨çå
¶ä»å½æ°ã
éææåå½æ°æä¸ä¸ªç±»èå´ï¼ä»ä»¬ä¸è½è®¿é®ç±»ç this æéãæ¨å¯ä»¥ä½¿ç¨éææåå½æ°æ¥å¤æç±»çæäºå¯¹è±¡æ¯å¦å·²è¢«å建ã
温馨提示:内容为网友见解,仅供参考