【C/C++基礎演習】復習問題 第1巻

変数を定義する場合、変数の一部のストレージ クラス指定子を省略できます。

関数内で変数を自動定義する場合、ストレージ型指定子は省略できます。

インクリメント演算子とデクリメント演算子は変数にのみ使用でき、式や定数には使用できません。

配列を定義するとき、その要素の一部は初期化されますが、初期化されていない要素の値は無意味ではありません

オブジェクトのメンバーは構造体の変数のメンバーと同じ方法で表現されます。

コンストラクターはオーバーロードできますが、デストラクターはオーバーロードできません

フレンド関数はクラス本体内の非メンバー関数であり、クラスのすべてのメンバーにアクセスできます。
派生クラスは、基本クラスからパブリック メンバーとプロテクト メンバーのみを継承し、プライベート メンバーは継承しません。×です

解析:プライベート メンバーも継承されますが、アクセスできません

仮想関数はメンバー関数です

純粋仮想関数を持つクラスは抽象クラスと呼ばれます

静的データ メンバーの初期化ではコンストラクターが使用されません。
静的メンバー関数では非静的メンバーを直接参照できません。


1. 静的メンバーは () に属し、オブジェクト名で参照されるだけでなく、() クラスの参照にも使用できます。クラス名は制限されています。

2. 既知: double dd[ ][3]={ {1.2, 2.4, 3.6}, {4.8, 5.2},{6.4}}; ここで、dd は
2 次元配列の名前であり、配列には () 要素があります。 、各要素の型は () です。

答え: 型が double の場合は 3 つの角括弧があり、double の場合は 9 つの
3 があります。次のプログラム セグメントを実行すると、k の値は () int k=1,n=263; do { k*=n%10 ;n/=10; } while(n);

答え: k=k*(n/10)=1*3=3、n=n/10=26 k=
3*6=18、n=26/10=2
k=18*2=36、n= 2/10=0、この時点で n=0、ループは終了します。出力 k の値は 36 です。

4. 「オブジェクト名.メンバ変数」の形式でアクセスできるオブジェクトのメンバは()で宣言したメンバに限定されており、それ以外のメンバ
変数にアクセスしたい場合はメンバ関数関数または()関数を使用する必要があります。

答え:パブリックフレンド

5. a=4、b=6、c=8、d=9 の場合、「(a++, b>a++&&c>d)?++d: a<b」の​​値は (0) になります。
答え: 疑問符の前の式が true の場合、式の結果は ++d の値になります。そうでない場合は、a<b の値になります。まず疑問符の前の式を見てください。これはコンマ式です
。 a++ が最初に実行されます。 + + の後の a の値は 5 ですが、式の結果は b>a++&&c>d に依存します。c は 8 に等しく、d は 9 に等しいため、式は true ではありません。したがって、最終結果は a < b の結果になります。a++ を 2 回実行した後の a の値は 6、b の値は 6 であるため、a < b の結果は 0 となり、式全体の結果は次のようになります。 0
6. 次の誤った記述は (B) です。
A.if(x>y); B.if(x=y)&&(x!=0) x+=y;

7.. C++ 言語では、パラメータのデフォルト値に関する記述は正しいです (B)。
A.パラメータのデフォルト値は、関数が定義されている場合にのみ設定できます
B. パラメータのデフォルト値を設定する場合は、右から左に設定する必要があります
C. パラメータのデフォルト値を設定する場合は、すべて
Dを設定してください。パラメータのデフォルト値を設定した後、呼び出し側関数はパラメータに値を割り当てることができなくなります。

8. x が整数変数の場合、正当な形式は (D) です。
A.&(x+5) B.*x C.&*x D.*&バツ

9. コピーコンストラクタの以下の特徴のうち、(D)が誤りです。
A.クラスにコピー コンストラクターが定義されていない場合、システムはデフォルトの
Bを自動的に生成します。
コピー コンストラクターにはパラメーターが 1 つだけあり、それはこのクラスCのオブジェクトへの参照です。コピー コンストラクターはメンバー関数
Dです。コピーコンストラクタの名前にクラス名を使用することはできません。
10. 友達の説明で、(A)が間違っています。
A.フレンド関数は、クラス本体
Bで宣言されるメンバー関数です。フレンド関数は、クラス
Cのプライベート メンバーに直接アクセスできます。Friend 関数はカプセル化を破るので、できるだけ使用しないようにします
D. フレンド クラスのすべてのメンバー関数はフレンド関数です

11. 以下の仮想基底クラスの宣言のうち、正しいものは(D)です。
A. 仮想クラス B: パブリック A B. 仮想クラス B: パブリック A
C. クラス B: パブリック A 仮想 D. クラス B: 仮想パブリック A

12. 動的リンクを実現するには、(A) を通じて仮想関数を呼び出す必要があります。
A.オブジェクトポインタ b. メンバー名の制限 C. オブジェクト名 d. 派生クラス名

13. 以下の抽象クラスの説明で、間違っているのは(D)です。
A.抽象クラス B には少なくとも 1 つの純粋仮想関数が必要です。抽象クラスはオブジェクト ポインターとオブジェクト参照を定義できます
C. 抽象クラスは通常、クラス D の最上位クラスとして使用されます。抽象クラスの派生クラスは具象クラスでなければなりません

以下の説明において、(D)は抽象クラスの特徴である。
A.仮想関数について説明できる B. コンストラクターのオーバーロードが可能
C. フレンド機能を定義可能 D. オブジェクトを指定できません


 
#include <iostream.h>
#include <math.h>
class Complex
{p
ublic:
Complex(double r,double i);
~Complex();
double abscomplex();
private:
double real;
double imag;
};
Complex::Complex(double r,double i)
{
cout<<"Executing constructor..."<<endl;
real=r;
imag=i;
cout<<"real="<<real<<",imag="<<imag<<endl;
}C
omplex::~Complex()
{
cout<<"Executing destructor...";
cout<<"real="<<real<<",imag="<<imag <<endl;
}d
ouble Complex::abscomplex()
{
double t;
t=real*real+imag*imag;
return sqrt(t);
}i
nt main()
{
Complex A(3,4);
Complex B(6,8);
cout<<"|A|="<<A.abscomplex()<<endl;
cout<<"|B|="<<B.abscomplex()<<endl;
return 0;
}
プログラム実行結果:
コンストラクタの実行...
real=3,imag=4
コンストラクタの実行...
Real=6,imag=8
|A|=5
|B|=1
#include<iostream.h>
class Point
{p
ublic:
Point()
{
x=0;y=0;
cout<<" Call Default Constructor."<<endl;
cout<<x<<","<<y<<endl;
}
Point(int x1,int y1)
{
x=x1;
y=y1;
cout<< " Call Constructor."<<endl;
cout<<x<<","<<y<<endl;
}
~Point()
{
cout<<" Call Destructor."<<endl;
}
int Getx() {return x;}
int Gety() {return y;}
private:
int x,y;
};
void main()
{
cout<<"Object One:"<<endl;
Point *Ptr1=new Point;
delete Ptr1;
cout<<"Object Two:"<<endl;
Ptr1=new Point(1,2);
delete Ptr1;
}
オブジェクト 1:
デフォルトのコンストラクターを呼び出します。
0,0
デストラクターを呼び出します。
オブジェクト 2:
(1点)
(1点)
(1点)
デフォルトのコンストラクターを呼び出します。
1,2
デストラクターを呼び出します。
(1点)
(1点)
(1点)

#include <iostream.h>
class BaseA1
{p
ublic:
BaseA1(int i)
{
cout<<"Constructing BaseA1 "<<endl;
x1=i;
} v
oid print()
{
cout<<"x1="<<x1<<endl;
}
protected:
int x1;
};
class BaseA2
{p
ublic:
BaseA2(int j)
{
cout<<"Constructing BaseA2 "<<endl;
x2=j;
} v
oid print()
{
cout<<"x2="<<x2<<endl;
}protected:
int x2;
};
class BaseA3
{p
ublic:
BaseA3()
{
cout<<"Constructing BaseA3"<<endl;
} v
oid print()
{
cout<<"Costructing BaseA3 No Value!"<<endl;
}
};
class MDerivedB: public BaseA2, public BaseA1, public BaseA3
{p
ublic:
MDerivedB(int a, int b, int c, int d):BaseA1(a),A2(d),
A1(c),BaseA2(b){}
void print()
{
BaseA1::print();
BaseA2::print();
BaseA3::print();
}
private:
BaseA1 A1;
BaseA2 A2;
BaseA3 A3;
};
void main()
{
MDerivedB obj(1,2,3,4);
obj.print();
}
程序実行結果:
BaseA2 の構築
BaseA1 の
構築 BaseA3 の
構築 BaseA1 の
構築 BaseA2 の
構築 BaseA3 の構築
x1=1
x2=2
BaseA3 の構築 値はありません。
 

プライベート データに点の平面座標 x と y が含まれる点クラス Point を定義し、パラメーター化されたコンストラクターを使用してオブジェクト座標を決定します。任意の 2 点間の距離を計算するフレンド関数 Distance を作成します。main 関数で 2 つの点 P1 と P2 を定義します。座標はそれぞれ (0,0) と (10,20) で
、これら 2 点間の距離を計算して出力します。

#include <iostream.h>
#include <math.h>
class Point
{p
ublic:
Point(double x1,double y1)
{
x=x1;
y=y1;
} f
riend double Distance(Point &p1,Point &p2); //友元函数的声明
private:
double x,y;
};
double Distance(Point &p1,Point &p2) //普通函数作为友元函数
{
double deltax,deltay;
deltax=p1.x-p2.x; //访问私有成员
deltay=p1.y-p2.y; //访问私有成员
return sqrt(deltax*deltax+deltay*deltay);
}v
oid main()
{
Point p1(0,0);
Point p2(10,20);
cout<<"以上两给定点之间的距离是:"<<Distance(p1,p2)<<endl;
}

おすすめ

転載: blog.csdn.net/Catherine_77/article/details/128903245