C++第五章練習問題
19372 ワード
静的アセンブリとは、システムがコンパイル時にどのように動作を実現するかを決定することです.
動的アセンブリとは、システムが実行時に動的に動作を実現することを意味します.
静的アセンブリでサポートされるマルチステートは、コンパイル時のマルチステートと呼ばれ、静的マルチステートとも呼ばれます.コンパイル時のマルチステート性は、関数の再ロードとテンプレートによって実現されます.
ダイナミックアセンブリでサポートされるマルチステートは、ランタイムマルチステートと呼ばれ、ダイナミックマルチステートとも呼ばれます.虚関数によって実現される.
a)C++のほとんどの演算子はリロードを許可する.
b)C++は既存のC++演算子のみをリロードする.
c)演算子のリロードは,新しいタイプのデータの実際のニーズに対して,既存の演算子を適切に改造して完成する.従来の機能と似ているはずです.
d)リロード演算子を変更できない操作オブジェクトの個数.
e)リロードは演算子の元の優先度を変えることはできない.
f)従来の結合特性を変えることはできない.
g)パラメータの少なくとも1つはクラスオブジェクトであるべきである.
h)リロード関数は、通常の関数であってもよいし、クラスのメンバー関数であってもよいし、クラスの友元関数であってもよい.
i)クラスオブジェクトに一般的に使用される演算子は、代入演算子以外は再ロードされます.
a)両目演算子の場合、メンバー演算子のリロードには1つのパラメータが含まれ、友元のリロードには2つのパラメータが含まれている.単一演算子の場合、メンバーのリロードにはパラメータがなく、友元のリロードにはパラメータがあります.
b)両目演算子は、一般に、友元またはメンバーとして再ロードすることができる.ただし、オブジェクトと通常のタイプの演算を行う場合は、友元として再ロードする必要があります.
c)呼び出し方式が異なる.
d)一般的に、両目演算子は友元、単目演算子はメンバーを用いる.オペランドに暗黙的なタイプ変換がある場合は、友元を使用する必要があります.
虚関数とは、ベースクラスでキーワードvirtualによって説明され、派生クラスで再定義される関数である.
関数名は同じです.
リロード関数のパラメータ数またはパラメータタイプは異なる必要があります.虚関数は、関数名、戻りタイプ、パラメータ個数、パラメータのタイプと順序がベースクラスの虚関数プロトタイプと完全に同じであることを要求します.
純虚関数は、ベースクラスで定義されていないが、派生クラスで必要に応じて定義するか、純虚関数として説明する必要があるベースクラスで説明される虚関数です.
1つのクラスに少なくとも1つの純粋な虚関数がある場合、このクラスを抽象クラスと呼ぶ.
7-12 DAADCC
13.
いいえ、パラメータの個数は同じでなければなりません.
14.
7
6
15.
This is c++book.
最初の文字:T
16文字目:.
26番目の文字:配列の下にスーパー境界をマーク!
16.
m=1.5 km
17.
#include
using namespace std;
class twoDArray
{
int a[2][3];
public:
twoDArray()
{
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
a[i][j] = 5;
}
twoDArray(int b[][3])
{
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
a[i][j] = b[i][j];
}
void show();
twoDArray operator+(twoDArray n);
twoDArray operator-(twoDArray n);
};
void twoDArray::show()
{
for(int i = 0; i <2; i ++)
{
for(int j = 0; j < 3; j ++)
cout << a[i][j];
cout << endl;
}
}
twoDArray twoDArray::operator+(twoDArray n)
{
twoDArray temp;
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
temp.a[i][j] = a[i][j] + n.a[i][j];
return temp;
}
twoDArray twoDArray::operator-(twoDArray n)
{
twoDArray temp;
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
temp.a[i][j] = a[i][j] - n.a[i][j];
return temp;
}
int main()
{
int a[2][3];
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
cin >> a[i][j];
twoDArray a1, a2(a), total, sub;
total = a1 + a2;
sub = a1 - a2;
total.show();
sub.show();
return 0;
}
18.
#include
using namespace std;
class twoDArray
{
int a[2][3];
public:
twoDArray()
{
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
a[i][j] = 5;
}
twoDArray(int b[][3])
{
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
a[i][j] = b[i][j];
}
void show();
friend twoDArray operator+(twoDArray m, twoDArray n);
friend twoDArray operator-(twoDArray m, twoDArray n);
};
void twoDArray::show()
{
for(int i = 0; i <2; i ++)
{
for(int j = 0; j < 3; j ++)
cout << a[i][j];
cout << endl;
}
}
twoDArray operator+(twoDArray m, twoDArray n)
{
twoDArray temp;
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
temp.a[i][j] = m.a[i][j] + n.a[i][j];
return temp;
}
twoDArray operator-(twoDArray m, twoDArray n)
{
twoDArray temp;
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
temp.a[i][j] = m.a[i][j] - n.a[i][j];
return temp;
}
int main()
{
int a[2][3];
for(int i = 0; i <2; i ++)
for(int j = 0; j < 3; j ++)
cin >> a[i][j];
twoDArray a1, a2(a), total, sub;
total = a1 + a2;
sub = a1 - a2;
total.show();
sub.show();
return 0;
}
19.
#include
using namespace std;
class complex
{
double real, imag;
public:
complex(double re, double im)
{
real = re;
imag = im;
}
friend complex operator+(complex a, complex b);
void print();
};
complex operator+(complex a, complex b)
{
return complex(a.real + b.real, a.imag + b.imag);
}
void complex::print()
{
cout << "(" << real << "," << imag << ")" << endl;
}
int main()
{
complex c1(2.5,3.7);
complex c2(4.2,6.5);
complex total = c1 + c2;
total.print();
return 0;
}
20.
#include
using namespace std;
const double PI = 3.14;
class Container
{
protected:
double r, d; // ,r ,d 0. ,r ,d 。 ,r , d 0。
public:
Container(double a, double b = 0)
{
r = a;
d = b;
}
virtual double serface() = 0; //
virtual double volume() = 0; //
};
class Sphere : public Container
{
public:
Sphere(double r):Container(r){}
double serface();
double volume();
};
double Sphere::serface()
{
return 4*PI*r*r;
}
double Sphere::volume()
{
return PI*r*r*r;
}
class Cylinder : public Container
{
public:
Cylinder(double a, double b):Container(a, b){}
double serface();
double volume();
};
double Cylinder::serface()
{
return 2*PI*r*d + PI*r*r;
}
double Cylinder::volume()
{
return PI*r*r*d;
}
class Cube : public Container
{
public:
Cube(double a):Container(a){}
double serface();
double volume();
}
double Cube::serface()
{
return 6*r*r;
}
double Cube::volume()
{
return r*r*r;
}
転載先:https://www.cnblogs.com/tangzhengyue/archive/2012/06/15/2550871.html