2017プログラム設計実習のC++部分作業問題まとめ-E:多態と虚関数
9856 ワード
テーマ出所:2017プログラム設計実習のC++部分作業問題まとめ
1、E 01:多態に見える
合計時間制限:1000 msメモリ制限:65536 kB記述プログラム空欄指定出力生成
入力無出力D::Fun B::Fun D::Fun nBVal=2 nBVal=24 nDVal=8 B::Fun nBVal=12サンプル入力無サンプル出力D::Fun B::Fun D::Fun nBVal=2 nBVal=24 nDVal=8 B::Fun nBVal=12ソースGuo Wei
2、E 02:FunとDo
合計時間制限:1000 msメモリ制限:65536 kB記述プログラム空欄出力指定結果
入力無出力A::Fun C::Doサンプル入力Noneサンプル出力A::Fun C::DoソースGuo Wei
3、E 03:これは何の鬼deleteですか
合計時間制限:1000 msメモリ制限:65536 kB記述プログラム空欄出力指定結果
入力無出力destructor B destructor Aサンプル入力無サンプル出力destructor B destructor AソースGuo Wei
4、E 04:どうしてまたFunとDo
合計時間制限:1000 msメモリ制限:65536 kB記述プログラム空欄出力指定結果
入力出力なしA::Fun A::Do A::Fun C::Doサンプル入力サンプル出力:Fun A::Do A::Fun C::DoソースGuo Wei
1、E 01:多態に見える
合計時間制限:1000 msメモリ制限:65536 kB記述プログラム空欄指定出力生成
#include
using namespace std;
class B {
private:
int nBVal;
public:
void Print()
{ cout << "nBVal="<< nBVal << endl; }
void Fun()
{cout << "B::Fun" << endl; }
B ( int n ) { nBVal = n;}
};
//
class D:public B
{
private:
int nDVal;
public:
D(int n) :B(3*n),nDVal(n){}
void Fun()
{
cout << "D::Fun" << endl;
}
void Print()
{
B::Print();
cout << "nDVal=" << nDVal << endl;
}
};
//
int main() {
// virtual,
// virtual,
// mian
B * pb; D * pd;
D d(4); d.Fun(); //output D::Fun,D Fun B Fun
pb = new B(2);
pd = new D(8);
pb->Fun(); //output B::Fun
pd->Fun(); //output D::Fun
pb->Print (); //output nBVal=2
pd->Print (); //output nBVal=24
// nDVal=8
//D Print B Print, 8->24
pb->Fun(); //output B::Fun
pb->Print(); //output nBVal=12, 4->12,
return 0;
}
入力無出力D::Fun B::Fun D::Fun nBVal=2 nBVal=24 nDVal=8 B::Fun nBVal=12サンプル入力無サンプル出力D::Fun B::Fun D::Fun nBVal=2 nBVal=24 nDVal=8 B::Fun nBVal=12ソースGuo Wei
2、E 02:FunとDo
合計時間制限:1000 msメモリ制限:65536 kB記述プログラム空欄出力指定結果
#include
using namespace std;
class A {
private:
int nVal;
public:
void Fun()
{ cout << "A::Fun" << endl; };
void Do()
{ cout << "A::Do" << endl; }
};
class B:public A {
public:
virtual void Do()
{ cout << "B::Do" << endl;}
};
class C:public B {
public:
void Do( )
{ cout <<"C::Do"<void Fun()
{ cout << "C::Fun" << endl; }
};
// Call , p
//Fun virtual , , B A Fun, C B Fun
//Do A , B, C , C , C Do
// A::Fun A B
// C::Do B C, B , p
void Call(
//
B & p
//
) {
p.Fun(); p.Do();
}
int main() {
C c;
Call( c);
return 0;
}
入力無出力A::Fun C::Doサンプル入力Noneサンプル出力A::Fun C::DoソースGuo Wei
3、E 03:これは何の鬼deleteですか
合計時間制限:1000 msメモリ制限:65536 kB記述プログラム空欄出力指定結果
#include
using namespace std;
class A
{
public:
A() { }
//
virtual ~A(){ cout << "destructor A" << endl; }
//
};
class B:public A {
public:
~B() { cout << "destructor B" << endl; }
};
int main()
{
// mian
// A , destructor A
// , virtual,delete pa , pa B
// , A
A * pa;
pa = new B;
delete pa;
return 0;
}
入力無出力destructor B destructor Aサンプル入力無サンプル出力destructor B destructor AソースGuo Wei
4、E 04:どうしてまたFunとDo
合計時間制限:1000 msメモリ制限:65536 kB記述プログラム空欄出力指定結果
#include
using namespace std;
class A {
private:
int nVal;
public:
void Fun()
{ cout << "A::Fun" << endl; };
virtual void Do()
{ cout << "A::Do" << endl; }
};
class B:public A {
public:
virtual void Do()
{ cout << "B::Do" << endl;}
};
class C:public B {
public:
void Do( )
{ cout <<"C::Do"<void Fun()
{ cout << "C::Fun" << endl; }
};
// , p
//Fun virtual, , A B Fun A::Fun, C Fun C::Fun
//Do , A Do A::Do, B Do B::Do, C Do C::Do
void Call(
//
A * p
//
) {
p->Fun(); p->Do();
}
int main() {
// , , Call A *
Call( new A());
//output A::Fun
// A::Do
Call( new C());
// output A::Fun, A * B *
// C::Do
// , ,
// Call A * ,Call B *,A * B *
return 0;
}
入力出力なしA::Fun A::Do A::Fun C::Doサンプル入力サンプル出力:Fun A::Do A::Fun C::DoソースGuo Wei