6
,
C++ ( ) . . ++ : .
-. C++ . , . , .
, , friend.
1.
class Any
{
int n, d;
public:
Any (int p, int r) { n = p; d = r;}
friend bool isDel (Any s);
}
bool isDel (Any s)
{
if (!(s. n % s. d)) return true;
return false;
// return (s. n % s. d)? false: true;
}
int main ()
{
Any ob (12, 3);
if (isDel (ob)) cout <<"Yes"<< endl;
else cout <<"No"<< endl;
}
, . , , ( ). , , , , . , .
2.
Dot. h
class Dot //
{
const char name; //
double x, y; //
public:
Dot( char Name): name (Name) { x =0; y =0;}
Dot( char Name, double X, double Y): name (Name) { x = X; y = Y;}
inline double GetX () const {return x;}
inline double GetY () const {return y;}
inline void SetX (double X) { x = X;}
inline void SetY (double Y) { y = Y;}
double Dist (Dot B) const;
friend double Dist (const Dot & A, const Dot & B);
};
double Dist (Dot * pA, Dot * pB); //
double Area( const Dot & A, const Dot & B, const Dot & C);
Dot. cpp
double Dot:: Dist (Dot B) const
{
double X = B. x x;
double Y = B. y y;
return sqrt (X * X + Y * Y);
}
double Dot:: Dist (const Dot & A, const Dot & B)
{
double X = A. x − B. x;
double Y = A. y − B. y;
return sqrt (X * X + Y * Y);
}
double Dist (Dot * pA, Dot * pB)
{
double X = pA -> GetX ()− pB -> GetX (); //
double Y =* pA.GetY ()−* pB.GetY (); //
return sqrt (X * X + Y * Y); //
|
|
} //
double Area (const Dot & A, const Dot & B, const Dot & C)
{
double a = Dist (B, C);
double b = Dist (A, C);
double c = Dist (A, B);
double p =(a + b + c)/2.0;
return sqrt (p *(p − a)*(p − b)*(p − c));
}
Main. cpp
int main ()
{
char S [30];
Dot A ('A', 3, 4), B ('B', −3, 4);
Dot C ('C');
CharToOem (" ", S);
cout << S <<"AB="<< A. Dist(B)<<'\n';
cout << S <<"BC="<< Dist (B, C)<<'\n';
cout << S <<"AC="<< Dist (& A, & C)<<'\n';
CharToOem (" ", S);
cout << S <<"ABC="<< Area (A, B, C)<<'\n';
}
Dot . .
double Dot:: Dist(Dot B) const Dot . const , . Dot, 17 . - : A. Dist (B), , .
friend double Dist (const Dot & A, const Dot & B) . const , . Dot, 4 . Dist (A, B). Dot, x y A B, Dot, , : A. x.
double Dist (Dot * pA, Dot * pB) . Dot, 4 . Dist (& A, & B). Dot, , x y A B. x y - GetX () GetY () , : pA -> GetX (). , .
, , .
double Area (const Dot & A, const Dot & B, const Dot & C), . Area (A, B, ). , Dot, . .
|
|
,
. , .
3.
DotVec. h
# include < iostream. h >
# include < windows. h >
# include < math.h >
class Vec; //
class Dot //
{
const char name; //
double x, y; //
public:
Dot( char Name): name(Name) { x =0; y =0;}
Dot( char Name, double X, double Y): name (Name) { x = X; y = Y;}
inline double GetX() const {return x;}
inline double GetY() const {return y;}
inline void SetX( double X) { x = X;}
inline void SetY( double Y) { y = Y;}
//
void EndVec (const Dot & A, const Vec & AB);
//
friend void EndVec (const Dot & A, const Vec & AB, Dot & B);
};
class Vec //
{
char name [3];
double x, y;
public:
Vec (char * pName) { strncpy (name, pName, 3); x =0; y =0;}
Vec (char * pName, double X, double Y) { strncpy (name, pName, 3); x = X; y = Y;}
//
Vec (char * pName, Dot A, Dot B);
double GetX () const {return x;}
double GetY () const {return y;}
//
void EndVec (const Dot & A, Dot & B);
//
friend void EndVec (const Dot & A, const Vec & AB, Dot & B);
};
DotVec. cpp
# include " DotVec. h "
Vec:: Vec (char * pName, Dot A, Dot B)
{
strncpy (name, pName, 3);
x = B.GetX () -A.GetX ();
y = B.GetY () -A.GetY ();
}
//
void Dot:: EndVec (const Dot & A, const Vec & AB)
{
x = A. x + AB. GetX ();
y = A. y + AB. GetY ();
}
void Vec:: EndVec (const Dot & A, Dot & B)
{
B. SetX (A. GetX ()+ x);
B. SetY (A. GetY ()+ y);
}
void EndVec (const Dot & A, const Vec & AB, Dot & B)
{
B. x = A. x + AB. x;
B. y = A. y + AB. y;
}
Main. cpp
# include " DotVec. h "
void main ()
{
Dot A ('A', 3, 4), B ('B',-3, 4);
Dot C ('C'), D ('D');
Vec AB ("AB", A, B);
Vec AC ("AC", 2, 2);
C. EndVec (A, AC);
AC. EndVec (A, C);
EndVec (A, AC, C);
}
: . Vec . , , DotVec. h.
Dot Vec .
void Dot:: EndVec (const Dot & A, const Vec & AB) Dot, . - Vec Dot, - Vec GetY () GetX (). - : C. EndVec (A, AC), C , A AC .
void Vec:: EndVec (const Dot & A, Dot & B) Vec, . . - Dot Vec, - Dot GetX (), GetY (), SetX (), SetY (). - : AC. EndVec (A, C), AC , A C .
|
|
friend void EndVec (const Dot & A, const Vec & AB, Dot & B) Dot Vec. friend. , . - Dot Vec , . EndVec (A, AC, C).
-,
. .
4.
DotVec. h
class Vec;
class Dot
{
public:
void EndVec (const Dot & A, const Vec & AB);
};
class Vec
{
public:
void EndVec (const Dot & A, Dot & B);
friend void Dot:: EndVec (const Dot & A, const Vec & AB);
};
DotVec. cpp
# include " DotVec. h "
void Dot:: EndVec (const Dot & A, const Vec & AB)
{
x = A. x + AB. x;
y = A. y + AB. y;
}
void Vec:: EndVec (const Dot & A, Dot & B)
{
B. SetX (A. GetX ()+ x);
B. SetY (A. GetY ()+ y);
}
void void Dot:: EndVec (const Dot & A, const Vec & AB) Dot, friend Vec. , Vec. - Vec , - Vec.
, , , . void Vec:: EndVec (const Dot & A, Dot & B) Dot, Vec Dot.
.
C++ , , . , , friend.
5.
class A
{
friend class B;
};
. , , .
6.
class Dot
{
friend class Vec; // Vec Dot
const char name;
double x, y;
public:
Dot (char Name): name (Name){ x =0; y =0;}
Dot (char Name, double X, double Y): name (Name) { x = X; y = Y;}
void Print () const;
};
class Vec
{
char name [ 3 ];
double x, y;
public:
Vec (char * pName) { strncpy (name, pName, 3); x =0; y =0;}
Vec (char * pName, double X, double Y) { strncpy (name, pName, 3); x = X; y = Y;}
Vec (char * pName, Dot A, Dot B);
void Print ();
void EndVec (const Dot & A, Dot & B);
};
. , , C++ . .
7.
class B; // !
class A
{
friend class B;
};
class B
{
friend class A;
};
, , , A B, , -.
|
|
:
: A B, , B A;
: B A, , B, A;
: B A, B , A.