C++第7回PTA練習問題まとめ(2)

17916 ワード

  • オブジェクト向けプログラム設計の継承性は、プログラマが実践的に検証された高品質のソフトウェアを再利用することを奨励する.T
  • protected保護継承では、垂直アクセスは公有継承に等しく、水平アクセスは私有継承に等しい.T
  • クラスのプライベートメンバーAは、クラスのメンバー関数のみによってアクセス可能Bは、クラスのメンバー関数および友元関数のみによってアクセス可能Cは、クラスのメンバー関数、友元関数および派生クラスDによってのみアクセス可能である以上の答えは、B
  • ではない.
  • 以下のプログラムの実行結果は#include using namespace stdである.class A { public: A() { cout << “1”; } ~A() { cout << “2”; } }; class B: public A { public: B() { cout << “3”; } ~B() { cout << “4”; } }; int main() { B b; return 0; } A1234 B1324 C1342 D3142 C
  • 共通継承の場合、派生クラスでアクセス可能なベースクラスメンバーは、A共通メンバーB保護メンバーC共通メンバー、保護メンバーおよびプライベートメンバーD共通メンバーおよび保護メンバーD
  • を含む.
  • 次の派生クラスコンストラクタと構造解析関数についての説では、誤ってA派生クラスのコンストラクタが呼び出しベースクラスのコンストラクタBを暗黙的に含んでいるということである.ベースクラスがパラメータテーブル付きコンストラクタを宣言した場合、派生クラスはコンストラクタCが派生クラスオブジェクトを構築する際に、まずベースクラスのコンストラクタを呼び出すことを宣言しなければならない.再呼び出し派生クラスのコンストラクタD派生クラスオブジェクトを破棄するときは、まずベースクラスのコンストラクタを呼び出し、再呼び出し派生クラスのコンストラクタD
  • を呼び出す.
  • 派生クラスがベースクラスを継承する方式Apublic Bprivate Cprotected D以上がD
  • に対して
  • 共通派生がある場合、Aは派生クラスオブジェクトBにベースクラスオブジェクトのアドレスをコピーすることができ、ベースクラスポインタCには派生クラスオブジェクトをベースクラスに割り当てることができる参照Dは派生クラスオブジェクトA
  • には派生クラスオブジェクトを割り当てることができると仮定する.
  • 平面幾何形状の面積(円形と矩形)C++を求める次のshapeクラスは形状を表すベースクラスであり、このクラスには形状面積を計算する方法area()がある.形状クラス「Shape」をベースクラスとして円形クラス「Circle」と矩形クラス「Rectangle」を派生させ、面積を求めるインタフェースを一定に保つようにしてください.キーボードから円形の半径と矩形の長さと幅を入力し、メイン関数に円形クラス「Circle」のオブジェクトと矩形クラス「Rectangle」のオブジェクトを作成し、この円形と矩形の面積を計算して出力します.円周率PI=3.14 class shape{public:double area(){}};円形クラス名:Circle注意:円周率PI=3.14矩形クラス名:Rectangle審判試験プログラムサンプル:#include using namespace std;class Shape{ public: double area ( ){ return -1; } };//あなたが提出したコードはここに埋め込まれます.int main() { double r,h,w; cin>>r>>h>>w; Circle c®; Rectangle rect(h,w); cout< cout< return 0; } 入力サンプル:8.8 16.8 9.8出力サンプル:The area of the Circle is 243.162 The area of the Rectangle is 164.64
  • const double PI=3.14;
    class Circle:public Shape{
      private:
        double r;
      public:
        Circle(double a)
        { r=a;}
        double area()
        {
          return PI*r*r;
        }
    };
    class Rectangle:public Shape{
      private:
        double len,wid;
      public:
        Rectangle(double b,double c)
        {
          wid=b;  len=c;
        }
        double area()
        {
          return len*wid;
        }
    };
    
    
  • 派生クラス構築方法(C++)審判テストプログラムサンプルには、ベースクラスPeople、派生クラスStudent、およびテストの2つのクラスを定義する関連C++コードが表示されます.一部のコードが欠落しています.テストプログラムが正常に動作することを保証するために、完全に補充してください.関数インタフェース定義:ヒント:クラスの定義とmainメソッドのテストコードを観察し、欠落したコードを補完します.テストプログラムのサンプルを裁く:注意:本物のテストプログラムで使用されるデータは、サンプルテストプログラムとは異なる場合がありますが、サンプルのフォーマットに従って関連関数を呼び出すだけです.include using namespace std; class People{ private: string id; string name; public: People(string id, string name){ this->id = id; this->name = name; } string getId(){ return this->id; } string getName(){ return name; } }; class Student:public People{private:string sid;int score;public:Student(string id,string name,string sid,int score)/**あなたが提出したコードはここに埋め込まれます(*/}friend ostream&operator<};ostream& operator < o << “(Name:” << s.getName() << “; id:” << s.getId() << “; sid:” << s.sid << “; score:” << s.score << “)”; return o; } int main(){ Student zs(“370202X”, “Zhang San”, “1052102”, 96); cout << zs << endl; return 0; } 入力サンプル:(なし)出力サンプル:(Name:Zhang San;id:370202 X;sid:1052102;score:96)
  • :People(id,name)
    {
        this->sid=sid;
        this->score=score;
    
    
  • 計算円柱の表面積(関数名非表示)CylinderクラスはCircleクラスの派生クラスであり、以下のプログラムで円柱の表面積を計算し出力する.下記の手順をお読みください.次のCylinderクラスを補完してコミットします.Cylinderクラスの定義:class Cylinder:public Circle{double height;public:...};あなたが提出したCylinderクラスの定義は次のプログラムに埋め込まれます:#include using namespace std;const double PI=3.1415926; class Circle{ protected: double radius; public: Circle(double r){ radius=r; } double getArea(){ return PIradiusradius; } };//あなたが提出したコードはここに埋め込まれますint main(){double r,h;cin>>r>>h;Cylinder Cy 1(r,h);cout
    class Cylinder :public Circle{
    public:
        Cylinder(double r, double h):Circle(r),height(h){}
        double getArea()
        {
            return PI*radius*radius * 2  + 2.0 * PI * radius * height;
        }
    private:
        double height;
    };
    
    
  • 学生CPP成績計算は、class Person{protected:string name;int age;public:Person();Person(string p_name,int p_age);void display(){cout<};派生クラスstudentを作成し、次のメンバーデータを追加します:int ID;//学号float cpp_score;//cpp上機成績float cpp_count;//cpp上机考勤float cpp_grade;//cpp総評価成績//総評価成績計算規則:cpp_grade = cpp_score * 0.9 + cpp_count * 2; 次のメンバー関数を追加します:studentクラスのパラメトリック構造関数studentクラスのパラメトリック構造関数//注意cpp_gradeは、アップタイムの成績と勤務の計算結果void print()/現在のstudentの情報を出力//cpp_grade出力ビット小数//出力フォーマットID name cpp_を保持gradeは上記クラスを生成し,主関数を記述し,入力した学生基本情報に基づいて学生オブジェクトを構築し,cpp総評価成績を計算し,その学号,氏名,総評価成績を出力する.入力フォーマット:テスト入力にはいくつかのテスト例が含まれており、各テスト例は1行を占めている(学生名学号年齢cpp成績cpp勤務).0を読み込むと入力が終了し、対応する結果は出力されません.入力サンプル:Bob 10001 18 75.5 4 Mike 10005 17 95.0 5 0出力サンプル:10001 Bob 75.9 10005 Mike 95.5
  • #include  
    #include  
    #include  
    
    using namespace std; 
    
    class Person 
    { 
      protected: 
        string name; 
        int age; 
      public: 
        Person(){}; 
        Person(string p_name, int p_age)
        {
          name=p_name; 
          age=p_age;
        }; 
        ~Person(){ } 
        void display () 
        {
          cout<<name<<":"<<age<<endl;
        } 
    }; 
    class student:public Person { 
      private: 
        int ID; 
        float cpp_score; 
        float cpp_count; 
        float cpp_grade;
      public:
        student(){} 
        student(string n,int i,int a,float p,float q):Person(n,a) 
        {
          name=n;
          ID=i;
          age=a;
          cpp_score=p;
          cpp_count=q;
          cpp_grade=p*0.9+q*2;
        } 
        ~student(){} 
        void print() 
        { 
          cout<<ID<<" "<<name<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<cpp_grade<<endl;
        } 
    }; 
    int main() 
    { 
      int a,i;
      string n;
      float p,q; 
      while(1) 
      { 
        cin>>n; 
        if(n=="0") 
          return 0; 
        else
        { 
          cin>>i; 
          cin>>a; 
          cin>>p; 
          cin>>q; 
          student s(n,i,a,p,q); 
          s.print(); 
        } 
      } 
      return 0;
    }