C++
,
, ,
Java
C#
call back
2
1.
. , , . , .
, ( ) (, ""), .
, . . , , , . , , , , , , .
, , .
, . , , ( ). , , , . - , , , .
" ".
class Str
{
char str[80];
unsigned char att;
int row, col;
public:
void setStr (char*);
void setAtt (unsigned char);
void setCoord (int, int);
void printStr (int=0, int=0);
};
public, , "" (private) "" (public). - - , , - , .
private protected. , . , , - (friend) , . protected private , .
|
|
- , ; , .
- . , , , . - , :
class Str
{
//
void setStr (char *s) { strcpy (str, s); }
//
};
, - , . , - , , - :
class Str
{
//
void setStr (char *s);
//
};
void Str::setStr (char*)
{
strcpy (str, s);
}
- , - , .. , C. , C , C++ .
- C. : -, , -, C++ - .
. . - , ; this ( ) .
C++ - , , . , , , , "" . , . , . , . ~, . .
- , - :
) .
) : , void.
|
|
) , ; . X X, X* X& .
) , .
) , ; , , .
, ::. , , , . :: , ( ).
static, ; "". , , - . , , X. .
static , . - - X, X. this.
2.
, C++ , operator@, @ - . :
a) ;
b) :::, *,?:
c) ;
d) , ;
e) ( ..);
f) ++ -- ;
g) .
operator@ () , 0 2 . , - . , - , this .
@x ( x@), x Class, Class::operator@(void), ::operator@(Class); , . @x x.operator@(void), operator@(x).
x@y, x Class, Class::operator@(type y), ::operator@(Class x, type y), type , . x@y x.operator@(y), operator@(x,y).
, ( ) operator@ () .
|
|
C++ , . - .
, =, [], (), -> .
3
1.
, , , , , . , , .
. , . , , . , - , .
, ( ) , , . , , - . .
C++ .
2. .
:
class Base {
int *baseMember;
public:
Base (int arg=0) { baseMember = new int [arg]; }
~Base () { delete baseMember; }
};
, , , . , Base, , Derived:
class Derived: public Base {
int *derivedMember;
public:
Derived (int arg) { derivedMember = new int [arg]; }
~Derived () { delete derivedMember; }
};
class Derived: public Base , Derived Base; Base. Derived Base, Base Derived. Derived, baseMember derivedMember.
Derived : Base ( Base), Derived. .
Base , . , ( ) :
Derived::Derived (int arg): Base(arg)
{
derivedMember = new int (arg);
}
, :
Derived::Derived (int arg)
{
derivedMember = new int (arg);
}
, .
3. (protected)
|
|
: private public. , Derived, - baseMember, Derived:
void Derived::printMembers (ostream& s)
{
s<<*baseMember<<endl; //
s<<*derivedMember<<endl; //
}
- , , .. , Base - . baseMember Base, - Derived, Base Derived. C++ protected.
A , - . B A, A, B A, - B B:
class Base {
private:
int privateMember;
protected:
int protectedMember;
};
class Derived: public Base {
memberFunc () {
cout<<privateMember; //
cout<<protectedMember; //
}
};
//
Base base;
cout << base.protectedMember; //
Derived derived;
cout << derived.protectedMember; //
4.
, , ? :
class Derived: public Base { /* */ };
, - , , :
class Base
{
private:
int privateMember;
protected:
int protectedMember;
public:
int publicMember;
};
class privateDerived: Base {
public:
void f () { cout << privateMember; } //
void g () { cout << protectedMember; }
void h () { cout << publicMember; }
};
privateDerived derived;
derived.privateMember=1; //
derived.protectedMember=2; //
derived.publicMember=3; //
: . - , .
. , , , ( ) . :
class Derived: Base {
public:
Base::publicMember;
Base::protectedMember; //
protected:
Base::protectedMember;
Base::publicMember; //
};
(struct) , : , , ..
struct B: A { /* */ };
class B: public A { /* */ };
, , . , ,
struct B: A { /* */ };
class B: public A { public: /* */ };
4.
1.
. , ( ), . , ; .
: ( public private) , . :
|
|
class A { /* */ };
class B { /* */ };
class C: public A, private B { /* */};
, private . , :
C::C (int a, char * str):A(a),B(str) { /* */ }
, :
) , ;
) , , ;
) .
:
class B: public A, public A { /* */ }; //
, :
class Base { /* */ };
class A: public Base { /* */ };
class B: public Base { /* */ };
class Derived: public A, public B { /* */ };
Derived Base. , Base Derived . C++ .
, :
class Base { /* */ };
class A: public virtual Base { /* */ };
class B: public virtual Base { /* */ };
class Derived: public A, public B { /* */ };
Derived Base, - A, B.
:
) , , ; , ; , , . .
) ; ; .
, , : . . , , .
2.
: ; . :
class Base { /* */ };
class Derived: public Base { /* */ };
Derived derived;
Base base = derived;
:
Derived tmp = base; // , Derived
// Derived(Base&)
, () . , , () .
; , , . . ( , ), .
class Base { /* */ };
class Derived: public Base { /* */ };
; Derived * Base *; . .
:
class Base { /* */ };
class Derived: Base { /* */ };
.
, . : , ; , . , , (, ).
5.
1.
, , . : , , , .
, - , , , . , , Figure:
class Figure {
protected:
int lineColor;
int lineThickness;
int areaColor;
public:
FigureType type;
Figure (int color1, int color2, int width=NORM_WIDTH);
void drawElement ();
};
:
enum FigureType { LINE, POLYGON, CIRCLE };
, , :
struct Coord { int x,y; };
, Figure:
class Line: public Figure
{
Coord beg, end;
public:
Line (Coord b, Coord e, int color1, int color2);
void drawLine ();
};
class Polygon: public Figure
{
int numOfVertices;
int * vertices;
public:
Polygon (int num, int * coord, int color1, int color2);
void drawPolygon ();
};
class Circle: public Figure
{
Coord centre;
int radius;
public:
Circle (Coord c, int rad, int color1, int color2);
void drawCircle ();
};
Figure. , , . , . : , type Figure.
- . :
void Figure::drawElement ()
{
switch (type)
{
case LINE:
((Line*)this)->drawLine();
break;
case POLYGON:
((Polygon*)this)->drawPolygon();
break;
case CIRCLE:
((Circle*)this)->drawCircle();
break;
}
}
, type. , , . , , , , - .
: Figure , Figure::drawElement (), , FigureType. , Figure, , ?
C++ . , .. , , , - , , .
. , , : -, Figure, .. type FigureType ( ),
void drawElement ();
virtual void draw () {}
virtual , draw () , Figure. Figure draw () , , Figure. draw() , Figure. drawLine(), drawPolygon(), drawCircle():
class Line: public Figure
{
//
virtual void draw ();
}:
class Polygon: public Figure
{
//
virtual void draw ();
}:
class Circle: public Figure
{
//
virtual void draw ();
}:
draw () , , . virtual , . : , , . , , , Circle::draw ().
, . : 5-6 ( ).
, , , . ; , , , , .
Figure, , , Figure::draw () :
Figure::draw ()
{
cout<<": figure";
exit(1);
}
C++ , Figure . , , 0:
class Figure
{
//
virtual void draw ()=0;
};
. , , " "; , .
. . , , virtual. A, , . , A , , , virtual. virtual , . , , , .
. , . . .
6.
1.
:
class Base
{
public:
Base ();
~Base ();
};
class Derived: public Base
{
char * str;
public:
Derived (int arg){ str=new char [arg]; }
~Derived (){ delete str; }
};
:
//
Base * bp= new Derived (10);
delete bp;
, delete Base, "". , , Base :
class Base
{
//
virtual ~Base (){ /* */ }
};
. , , .
2.
, , "" ( ) . Mid (). ++ :
)
#define Mid(x,y) (((x)+(y))/2)
, , . . , , .
) Mid(). :
int Mid (int x, int y){ return (x+y)/2; }
int Mid (float x, float y){ return (x+y)/2; }
int Mid (Light x, Light y){ return (x+y)/2; }
, + / Light. Mid(), . , , , .
) C++ Mid ():
template <class Type> Type Mid (Type a, Type b) { return (a+b)/2; }
Type , . : template- . . :
template <class T1, class T2> T1& myFunction (T1&, T2&);
" ".
template <class Data> class Array {
Data* a;
int size;
int lowerBound;
public:
Array (int sz, int lb=0);
~Array();
Data& operator[] (int);
};
Array template- Data , Array . : -, ? : . - Array :
template <class Data>
Array<Data>::Array (int sz, int lb=0)
{
a = new Data [size=sz];
lowerBound = lb;
}
template <class Data>
Array<Data>::~Array (){ delete a; }
Array :
Array<int> theArray (5,1);