কুইজ

সমস্যা সেট 1

নিম্নলিখিত প্রোগ্রামটি অধ্যয়ন করুন এবং তারপরে নীচের প্রশ্নের উত্তর দিন। আমরা চাই আপনি শুধুমাত্র সোর্স কোড দেখে প্রশ্নগুলির উত্তর দিন, অর্থাৎ, অনুগ্রহ করে এটি একটি ফাইলে অনুলিপি করবেন না, এটি কম্পাইল করুন এবং এটি চালানোর উপর ভিত্তি করে প্রশ্নের উত্তর দিন। যে এটা থেকে সব মজা নিতে হবে!

int main() {
  int counter, first, last, next;
  first = 1; last = 2;

  for (counter = first; counter <= last; counter++) {
    cout << "\n " << counter;
    next = counter * counter;
    cout << " " << next;
  }

  counter = first;
  while (counter <= last) {
    cout << "\n " << counter;
    next = counter * counter;
    cout << " " << next;
    counter++;
  }

  counter = first;
  do {
    cout << "\n " << counter;
    next = counter * counter;
    cout << " " << next;
    counter++;
  } while (counter < last);
}

প্রশ্ন 1: এই প্রোগ্রামের আউটপুট কি?

ক) 1 2
2 4
1 2
2 4
1 2
2 4
খ) 1 1
2 4
1 1
2 4
1 1
2 4
গ) 1 1
2 4
1 1
2 4
1 1
ঘ) 1 1
2 4
1 1
1 1
2 4
ঙ) এটি কিছু আউটপুট করে না - সিনট্যাক্সে ত্রুটি রয়েছে।

প্রশ্ন 2: কি হবে যদি আমরা ডু-হাইল লুপের আগে "কাউন্টার" এর আরম্ভ অপসারণ করি?

ক) একটি অসীম লুপ - do-while লুপ 1 এর একটি সিরিজ আউটপুট করবে
খ) প্রোগ্রামের আউটপুট পরিবর্তন হবে না
গ) do-while লুপ আউটপুট 2 এবং 4.
ঘ) do-while লুপ কিছুই আউটপুট করবে না
ঙ) do-while লুপ আউটপুট 3 এবং 9.

প্রশ্ন 3: এই পৃষ্ঠার শীর্ষে মূল প্রোগ্রামটি দেওয়া হয়েছে, ধরে নিলাম আমরা লাইনটি সরিয়ে দিয়েছি যা while লুপের আগে কাউন্টার ভেরিয়েবলকে আরম্ভ করে। নিচের মতো যখন আমরা while-loop-এর ভিতরে কাউন্টার++ লাইনটিও সরিয়ে ফেলি তাহলে কী হবে?

ক) যখন লুপ কিছুই আউটপুট.
খ) যখন লুপ আউটপুট 1 এবং 1; do-while লুপ কিছুই আউটপুট.
গ) while লুপের আউটপুট একই হয় যখন উভয় লাইন অন্তর্ভুক্ত করা হয়।
ঘ) আমরা কম্পিউটার বন্ধ না করা পর্যন্ত সিস্টেমটি এলোমেলো সংখ্যা আউটপুট করবে।
ঙ) while লুপ হল একটি অসীম লুপ

প্রশ্ন 4: এই পৃষ্ঠার শীর্ষে মূল প্রোগ্রাম দেওয়া, while লুপটি এরকম দেখালে কী হবে?

counter = first;
while (counter <= last) {
  cout << "\n" << counter;
  if (first % 2 == 0)
    next = counter * counter;
  cout << "  " << next;
  counter++;
}
ক) while লুপের আউটপুট মূল প্রোগ্রামের মতোই।
খ) while লুপ কিছুই আউটপুট করবে না
গ) while লুপের আউটপুট হল 1 1 এবং 1 4।
ঘ) while লুপের আউটপুট হল 1 2 এবং 2 4।
ঙ) while লুপের আউটপুট হল 1 4 এবং 2 4।
চ) while লুপের আউটপুট হল 2 4 এবং 2 4।

প্রশ্ন 5: প্রথম চলকটি শেষের চেয়ে বড় হলে কী ঘটবে?

ক) while-লুপ কিছু আউটপুট করবে, কিন্তু অন্য কিছুই হবে না।
খ) do while-loop কিছু আউটপুট করবে, কিন্তু অন্য কিছুই হবে না।
গ) কোন আউটপুট হবে না.
ঘ) প্রোগ্রাম ফল্ট বা ক্র্যাশ seg হবে
ঙ) ফর-লুপ কিছু আউটপুট করবে, কিন্তু অন্য কিছুই হবে না।

প্রশ্ন 6: প্রোগ্রামের আউটপুট কি হবে যদি আমরা প্রথম ভেরিয়েবলটিকে শেষ ভেরিয়েবলের মতো আরম্ভ করি?

ক) do while-loop কিছু আউটপুট করবে, কিন্তু অন্য কিছুই হবে না।
খ) while-লুপ কিছু আউটপুট করবে, কিন্তু অন্য কিছুই হবে না।
গ) প্রতিটি লুপ একটি লাইন আউটপুট হবে.
ঘ) do while-loop 2 লাইন আউটপুট করবে, এবং অন্য loops এক লাইন।
ঙ) এটা কিছুই আউটপুট হবে
চ) ফর-লুপ কিছু আউটপুট করবে, কিন্তু অন্য কিছুই হবে না।


সমস্যা সেট 2

আগের সমস্যা সেটের মতো, এখানে আপনার বিবেচনার জন্য একটি প্রোগ্রাম রয়েছে। অনুগ্রহ করে শুধুমাত্র সোর্স কোড দেখে অনুসৃত প্রশ্নের উত্তর দিন।

#include <iostream>
using namespace std;

int main() {
  int Boys = 3, Girls = 5;
  void F1(int males, int females);
  void F2(int &m, int &f);

  F1(Boys, Girls);
  cout << "\nAfter calling F1, within main()";
  cout << "\n\tBoys = " << Boys; // #2
  cout << "\n\tGirls = " << Girls;

  F2(Boys, Girls);
  cout << "\nAfter calling F2, within main()";
  cout << "\n\tBoys = " << Boys; // #4
  cout << "\n\tGirls = " << Girls;
}

void F1(int b, int g) {
  b += 3, g += 4;
  cout << "\nF1";
  cout << "\n\tBoys = " << b; // #1
  cout << "\n\tGirls = " << g;
}

void F2(int &b, int &g) {
  b = b + 8, g = g + 5;
  cout << "\nF2";
  cout << "\n\tBoys = " << b; // #3
  cout << "\n\tGirls = " << g;
}

প্রশ্ন 1: চিহ্নিত লাইনে Boys ভেরিয়েবলের আউটপুট কি?

ক) #1:6
#2:3
#3: 11
#4: 11
খ) #1:6
#2:3
#3: 11
#4:3
গ) #1:6
#2:6
#3: 11
#4: 11
ঘ) এটি কিছুই আউটপুট করে না কারণ এটি কম্পাইল বা রান করে না।

প্রশ্ন 2: প্রোগ্রামের নিম্নলিখিত লাইনগুলির সাথে সম্পর্কিত সমস্ত কিছু বেছে নিন:

void F1(int males, int females);
void F2(int &m, int &f);
ক) C++ নিয়মগুলি বলে যে আমরা এই দুটি লাইন সরিয়ে ফেলতে পারি যতক্ষণ না পদ্ধতিগুলি ব্যবহারের আগে সংজ্ঞায়িত করা হয়।
খ) C++ নিয়ম বলে যে আর্গুমেন্টের নাম অবশ্যই ঘোষণা এবং সংজ্ঞার মধ্যে একই হতে হবে।
গ) এই দুটি লাইন মুছে দিলে এই প্রোগ্রামটি ক্র্যাশ হয়ে যাবে।
ঘ) ঘোষণাগুলি বিশ্বব্যাপী পরিসরে বলা আরও সাধারণ।
ঙ) এগুলোকে বলা হয় ফরোয়ার্ড ডিক্লেয়ারেশন।

প্রশ্ন 3: যদি আমরা main() থেকে নিচের লাইনটিকে সরিয়ে গ্লোবাল স্কোপে রাখি, তাহলে কী হবে?

int Boys = 3, Girls = 5;
ক) আউটপুট একই হবে।
খ) ছেলেরা = 3 এবং মেয়েরা = 5 সব আউটপুট
গ) ছেলেরা = 3 এবং মেয়েরা = 5 হবে শুধুমাত্র main() থেকে আউটপুট

প্রশ্ন 4: আমরা যদি প্রোগ্রামের শুরুতে পরিবর্তন করি তাহলে কি হবে:

// We have moved moved these to global scope
const int Boys = 3;
const int Girls = 5;

void main() {
  //int Boys = 3, Girls = 5;
ক) প্রোগ্রামটি কম্পাইল হবে কিন্তু আমরা যখন এটি চালানোর চেষ্টা করি তখন ক্র্যাশ হয়ে যাবে।
খ) আউটপুটে কোন পরিবর্তন হবে না
গ) পুরো প্রোগ্রাম জুড়ে আউটপুট হবে ছেলে = 3 মেয়ে = 5
ঘ) আউটপুট হবে ছেলে = 3 মেয়ে = 5 শুধুমাত্র main() থেকে আউটপুট
ঙ) প্রোগ্রামটি সম্ভবত কম্পাইল করবে না (কম্পাইলারের উপর নির্ভর করে)।

প্রশ্ন 5: ডেটা F2-তে মানের দ্বারা পাস করা হয়।

ক) সত্য।
খ) মিথ্যা।


সমস্যা সেট 3

আগের সমস্যা সেটের মতো, এখানে আপনার বিবেচনার জন্য একটি প্রোগ্রাম রয়েছে। অনুগ্রহ করে শুধুমাত্র সোর্স কোড দেখে অনুসৃত প্রশ্নের উত্তর দিন। এটি আগের দুটির চেয়ে বেশি আকর্ষণীয় - কোডটি সাবধানে ট্রেস করুন৷

#include <iostream>
using namespace std;

const int MAX_SIZE = 20;
typedef int ARR2D[MAX_SIZE][MAX_SIZE];

void Print(ARR2D in_array, int rows, int cols);
void Fill(ARR2D in_array, int rows, int cols);

int main() {
  ARR2D matrix;
  int row, col;
  do {
    cout << "Please enter the size of the matrix to generate (rows and cols) :" << endl;
    cin >> row >> col;
  } while (row <= 0 || row > MAX_SIZE || col <= 0 || col > MAX_SIZE);
  Fill(matrix, row, col);
  Print(matrix, row, col);
  return(0);
}

void Print(ARR2D in_array, int rows, int cols) {
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++)
      cout << '\t' << in_array[i][j];
    cout << endl;
  }
}

void Fill(ARR2D in_array, int rows, int cols) {
  for(int i = 0; i < rows; i++)
    for (int j = 0; j < cols; j++)
      in_array[i][j] = 0;

  const int limit = rows * cols;
  int cNum = 1;
  int cRow = 0;
  int cCol = 0;
  int cDir = 0;  // 0-north, 1-east, 2-south, 3-west

  while(true) {
    // Place the number.
    in_array[cRow][cCol] = cNum;
    cNum++;
    if (cNum > limit) break;

    int fRow = cRow;
    int fCol = cCol;
    while (true) {
      fRow = cRow;
      fCol = cCol;
      switch(cDir) {
        case 0: fRow--; break;
        case 1: fCol++; break;
        case 2: fRow++; break;
        case 3: fCol--; break;
      }

      if ( fRow >= 0 && fRow < rows && fCol >= 0 && fCol < cols && in_array[fRow][fCol] == 0)
        break;
      cDir = (cDir + 1) % 4;
    }
    cRow = fRow;
    cCol = fCol;
  }
}

প্রশ্ন 1: সারিগুলির জন্য 3 এবং কলামগুলির জন্য 4 ইনপুট সহ এই প্রোগ্রামটি কী আউটপুট করে?

ক) 1 2 3
4 5 6
৭ ৮ ৯
10 11 12
খ) 1 2 3 4
5 6 7 8
9 10 11 12
গ) 12 11 10 9
8 7 6 5
4 3 2 1
ঘ) 1 3 2 4
8 6 7 5
9 11 10 12
ঙ) 1 2 3 4
10 11 12 5
9 8 7 6
ছ) 9 8 7 6
10 11 12 5
1 2 3 4
জ) এটা কিছু আউটপুট না - যুক্তি ত্রুটিপূর্ণ.
আমি) এটি কিছু আউটপুট করে না - সিনট্যাক্স ত্রুটি আছে।
জ) এটি কিছু আউটপুট করে না - এটি অনুমিত হয় না।
ট) এটি প্রথম 12টি সংখ্যাকে আউটপুট করে যা মনে আসে যখন আপনি প্রোগ্রামটি চালানোর জন্য অপেক্ষা করছেন।

প্রশ্ন 2: আমরা যদি আমাদের main() ফাংশনে নিম্নলিখিত লাইন যোগ করি তাহলে কী হবে?

MAX_SIZE = 10;
ক) এটি C++ এ অনুমোদিত নয়।
খ) এটি অনুমোদিত; MAX_SIZE 20 সেট করে প্রোগ্রামটি চলবে
গ) এটি অনুমোদিত; প্রোগ্রামটি MAX_SIZE 10 এ সেট করার সাথে চলবে।

প্রশ্ন 3: উপরের প্রোগ্রাম থেকে নিম্নলিখিত চারটি লাইন বিবেচনা করুন:

const int MAX_SIZE = 20;
typedef int ARR2D [MAX_SIZE][MAX_SIZE];

void Print  (ARR2D A, int rows, int cols);
void Fill   (ARR2D A, int rows, int cols);

1) একটি টাইপডেফে একটি কনস্ট ব্যবহার করা কি সম্ভব?
2) একটি ভেরিয়েবল সেই প্রকারের ঘোষণা করার আগে একটি ঘোষণায় টাইপডেফ ব্যবহার করা কি সম্ভব?

ক) 1) হ্যাঁ 2) হ্যাঁ
খ) 1) না 2) না
গ) 1) না 2) হ্যাঁ
ঘ) 1) হ্যাঁ 2) না

প্রশ্ন 4: আমরা কি নিম্নলিখিত ব্যবহার করতে পারি:

#define MAX_SIZE 20
এর পরিবর্তে:
const int MAX_SIZE = 20;
ক) হ্যাঁ এটি কাজ করবে এবং C++ এ ধ্রুবকের জন্য #define ব্যবহার করা ভাল
খ) হ্যাঁ এটা কাজ করবে কিন্তু আমরা সাধারণত C++ এ ধ্রুবকের জন্য #define ব্যবহার করি না
গ) #define C++ এ উপলব্ধ নয়
ঘ) আপনি সি তে এই জিনিসগুলির কোনটিই করতে পারবেন না

প্রশ্ন 5: typedef একটি টাইপ নামের জন্য একটি উপনাম তৈরি করতে ব্যবহৃত হয়।

ক) সত্য।
খ) মিথ্যা।

প্রশ্ন 6: যদি আমরা Fill() ফাংশনে অ্যারে 0 তে আরম্ভ না করি তাহলে কী হবে?

ক) এটি চালানো হবে কিন্তু আউটপুট সব 12 এর হবে
খ) এটি সূক্ষ্মভাবে চলবে এবং একই আউটপুট তৈরি করবে যেন অ্যারেটি 0 তে আরম্ভ করা হয়
গ) প্রোগ্রাম চালানো হবে না বা ক্র্যাশ হবে
ঘ) এটি চালানো হবে কিন্তু আউটপুট সব 0 এর হবে
ঙ) এটি চালানো হবে কিন্তু কোনো আউটপুট তৈরি করতে পারে না

প্রশ্ন 7: প্রযোজ্য সমস্ত পরীক্ষা করুন। কেন আমরা এই প্রোগ্রামে MAX_SIZE এর জন্য const ব্যবহার করব? যেখানে প্রয়োজন সেখানে MAX_SIZE এর পরিবর্তে "20" টাইপ করা কি সহজ নয়?

ক) MAX_SIZE হল একটি অন্তর্নির্মিত C++ মান যা যে কেউ ব্যবহার করতে পারে। শুধু এটি সেট করুন এবং এটি ব্যবহার করুন.
খ) গ্লোবাল ভেরিয়েবলের মতো গ্লোবাল কনস্টগুলি এড়ানো উচিত
গ) একটি const ব্যবহার আমাদের প্রোগ্রাম বুঝতে সহজ করে তোলে
ঘ) একটি প্রোগ্রামে ম্যাজিক সংখ্যা সাধারণত ভাল অনুশীলন হিসাবে বিবেচিত হয়।
ঙ) আমরা যদি MAX_SIZE পরিবর্তন করতে চাই, আমাদের শুধুমাত্র একটি জায়গায় এটি পরিবর্তন করতে হবে

প্রশ্ন 8: Fill() ফাংশনের সুইচ স্টেটমেন্টে একটি ডিফল্ট কেস থাকা উচিত, কারণ এটি একটি অন্তর্ভুক্ত করা ভাল স্টাইল হিসাবে বিবেচিত হয়।

ক) সত্য।
খ) মিথ্যা।

প্রশ্ন 9: Fill() ফাংশনে লক্ষ্য করুন, আমরা স্টেটমেন্টের মধ্যে ভেরিয়েবল ঘোষণা করি। উদাহরণস্বরূপ, একটি ফর-লুপ চালানোর পরে cNum এবং cRow ঘোষণা করা হয় এবং আরম্ভ করা হয়। এটি কি C++ এ কাজ করবে, নাকি সমস্ত ভেরিয়েবলকে ফাংশনের শীর্ষে ঘোষণা করতে হবে?

ক) এটা করা জরিমানা.
খ) সমস্ত ভেরিয়েবল অবশ্যই ফাংশনের শীর্ষে ঘোষণা করতে হবে।
গ) উভয় উপায়ই ভুল - C++ একটি প্রোগ্রামের কোথাও ভেরিয়েবলের অনুমতি দেয় না।
ঘ) সমস্ত ভেরিয়েবলকে অবশ্যই গ্লোবাল স্কোপে ঘোষণা করতে হবে।

সমস্যা সেট 4

এখানে একটি সাধারণ ক্লাস সংজ্ঞায়িত এবং পরীক্ষা করা ফাইলগুলির একটি সেট রয়েছে। যথারীতি, শুধুমাত্র সোর্স কোড উল্লেখ করে অনুসরণ করা প্রশ্নের উত্তর দিন।

এখানে হেডার ফাইল (cow.h):

#ifndef COW_H
#define COW_H

using namespace std;

typedef enum Color {black, brown, beige, blackandwhite, nocolor};

class Cow {
 public:
  Cow();
  ~Cow();

  // accessors
  double weight() { return weight_; };
  string name() { return name_; };
  Color color() { return color_; };

  // mutators
  void set_name(string inName) { name_ = inName; };
  void set_color(Color inColor) { color_ = inColor; };
  void set_weight(double inWeight) {weight_ = inWeight; };

  void Moo();
  void Properties();

 private:
  Color color_;
  double weight_;
  string name_;
};

#endif

এখানে সংশ্লিষ্ট .cc ফাইল (cow.cc):

#include <iostream>
#include "cow.h"

using namespace std;

Cow::Cow() {}

Cow::~Cow() {}

void Cow::Moo() {
  cout << name() << " says MOO." << endl;
}

void Cow::Properties() {
  cout << name() << " weighs " << weight() << ", is "
       << color() << " and says MOO." << endl;
}

এবং এখানে এই ক্লাসের জন্য একটি ক্লায়েন্ট প্রোগ্রাম রয়েছে (cowmain.cc):

#include <iostream>
#include "cow.h"

using namespace std;

int main() {
  Cow cow1;
  cow1.set_name("betsy");
  cow1.set_weight(400.0);
  cow1.set_color(black);

  cow1.Moo();
  cow1.Properties();
}

প্রশ্ন 1: এই প্রোগ্রাম আউটপুট কি?

ক) betsy MOO বলেছেন.
বেটসির ওজন 400, 0 এবং MOO বলে৷
খ) betsy MOO বলেছেন.
বেটসির ওজন 400, কালো এবং MOO বলে৷
গ) betsy MOO বলেছেন.
betsy ওজন 400, হয়

প্রশ্ন 2: আমাদের কখনই হেডার ফাইলে অ্যাক্সেসর এবং মিউটেটর পদ্ধতির জন্য কোড রাখা উচিত নয়। (মনে রাখবেন একটি অ্যাক্সেসর হল একটি পদ্ধতি যা একটি মান প্রদান করে এবং একটি মিউটেটর একটি পদ্ধতি যা একটি মান পরিবর্তন করে।)

ক) সত্য।
খ) মিথ্যা।

প্রশ্ন 3: cow.cc-এর প্রতিটি ফাংশনের সংজ্ঞার আগে আমাদের কি "গরু::" দরকার?

ক) না - যেহেতু cow.h অন্তর্ভুক্ত
খ) হ্যাঁ

প্রশ্ন 4: কি ভূমিকা করবেন:

#ifndef COW_H
#define COW_H
...
#endif

হেডার ফাইলে খেলা?

সব আবেদন পছন্দ:

ক) ফাইলের নাম cow.h না COW_H।
খ) আমরা এটি না করলে, আমরা একটি রানটাইম ত্রুটি পেতে হবে
গ) যদি আমরা এটি না করি, আমরা একাধিকবার ফাইলটি অন্তর্ভুক্ত করতে পারি
ঘ) এক বা একাধিক কীওয়ার্ডের বানান ভুল থাকায় তারা কিছুই করে না।
ঙ) তারা কিছুই করে না কারণ কাউ ক্লাসে শুধুমাত্র একটি হেডার ফাইল রয়েছে।

প্রশ্ন 5: আমরা cowmain.cc এ নিম্নলিখিত লাইন যোগ করলে কি হবে?

cow1.weight_ = 24;
ক) প্রোগ্রাম চালানো হবে, এবং ওজন পরিবর্তনশীল এই লাইন দ্বারা পরিবর্তন করা হবে.
খ) প্রোগ্রাম কম্পাইল এবং চালানো হবে, কিন্তু যে লাইন ক্র্যাশ হবে.
গ) C++ এটির অনুমতি দেয় না।
ঘ) প্রোগ্রাম কম্পাইল এবং চালানো হবে, কিন্তু ওজন পরিবর্তনশীল এই লাইন দ্বারা পরিবর্তন করা হয় না.

প্রশ্ন 6: যখন নিম্নলিখিত লাইনটি কার্যকর করা হয়, তখন গরু শ্রেণীর কন্সট্রাক্টরকে বলা হয়:

Cow cow1;

কনস্ট্রাক্টরের কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য কি?

সব আবেদন পছন্দ

ক) তারা সাধারণত কোনো মান ফেরত দেয় না
খ) যদি আমরা আমাদের ক্লাসে একটি কনস্ট্রাক্টর প্রদান না করি তবে ক্লাসটি কম্পাইল হবে না
গ) কাউ ক্লাসের কনস্ট্রাক্টরটি অ্যাটিপিকাল কারণ এটি প্রাইভেট ভেরিয়েবল শুরু করে না।
ঘ) তারা সবসময় ক্লাস হিসাবে একই নাম আছে
ঙ) যতক্ষণ পর্যন্ত আর্গুমেন্টগুলি ভিন্ন হয় ততক্ষণ আমাদের একটি ক্লাসে বেশ কয়েকটি কনস্ট্রাক্টর থাকতে পারে
চ) যখন একটি ক্লাস ইনস্ট্যান্সিয়েট করা হয় তখন একটি কনস্ট্রাক্টরকে আহ্বান করা হয়।

প্রশ্ন 7: একটি ধ্বংসকারীর কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য কি?

ক) একটি ধ্বংসকারী বলা হয় যখন একটি বস্তু সুযোগের বাইরে চলে যায়
খ) একটি ধ্বংসকারীর ক্লাসের মতো একই নাম রয়েছে তবে "~" এর আগে
গ) cow.cc-এ ধ্বংসকারীর মধ্যে কিছু ভুল আছে যে এটি কিছুই করে না।
ঘ) যদি আমরা আমাদের ক্লাসের জন্য একটি ধ্বংসকারী তৈরি না করি তবে ক্লাসটি কম্পাইল হবে না

প্রশ্ন 8: ক্লায়েন্ট প্রোগ্রামটি যেভাবে ক্লাস ব্যবহার করছে তা বিবেচনা করে নিম্নলিখিতগুলি বিবেচনা করুন:

গরু শ্রেণীতে সদস্যদের সরকারী এবং বেসরকারীতে বিভক্ত করা উপযুক্ত নয়। অর্থাৎ, প্রাইভেট কিছু পাবলিক হওয়া উচিত বা যেটা পাবলিক সেটা প্রাইভেট হওয়া উচিত।

ক) সত্য।
খ) মিথ্যা।

প্রশ্ন 9: আমরা যদি cow.cc এর সাথে অন্য একটি কনস্ট্রাক্টর যোগ করি তাহলে কী হবে? নতুন কনস্ট্রাক্টর এই মত দেখায়

Cow::Cow(string inName, double inWeight, Color inColor) {
  set_name(inName);
  set_weight(inWeight);
  set_color(inColor);
}

এবং আমরা নিম্নলিখিত লাইনগুলি মেইন():

Cow cow2("milly", 350.2, brown);
cow2.Moo();
cow2.Properties();

আমরা এটা করতে পারি?

সব আবেদন পছন্দ

ক) main() এর লাইন যেখানে আমরা cow2 শুরু করি সেটি ক্র্যাশ হয়ে যাবে।
খ) আমাদের শুধুমাত্র একজন কনস্ট্রাক্টর থাকতে পারে।
গ) এটি C++ এ সাধারণ
ঘ) হ্যাঁ কিন্তু এটি সাধারণ C++ ব্যবহার নয়
ঙ) এটি ঠিক আছে, তবে এটি কিছু আউটপুট করবে না কারণ প্রাইভেটগুলি আরম্ভ করা হয়নি।
চ) আমরা একই ক্লাসের একটি পদ্ধতির মধ্যে থেকে setName(), setColor() এবং setWeight() কল করতে পারি না।


বোনাস প্রশ্ন

প্রশ্ন 1) নিম্নলিখিত আউটপুট কি?

#include <iostream>
using namespace std;

void HelpMe(int *p, int *num, int *q);
void WhereAmI(int *p, int *q, int a);

void HelpMe(int *p, int *num, int *q) {
  int a;

  a = 2;
  q = &a;
  *p = *q + *num;
  num = p;
}


void WhereAmI(int *p, int *q, int a) {
  a = 6;
  *p = a + *p;
  *q = a + 3;
  HelpMe(q, &a, p);
}


int main() {
  int *p;
  int q;
  int *num;
  int a;

  a = 3;
  q = 5;
  p = &a;
  num = &q;

  HelpMe(&a, p, num);
  WhereAmI(&q, p, *num);

  cout << "*p = " << *p << " q = " << q << " *num = " << *num << endl;
}
 

প্রশ্ন 2) নিম্নলিখিত বিবৃতিটি বিবেচনা করুন, অনুমান করুন যে একটি অ্যাপল ক্লাস বিদ্যমান এবং শুরু করা হয়েছে। অ্যাপল ক্লাসের একটি color_ ইনস্ট্যান্স ভেরিয়েবল রয়েছে:

Apple* granny_smith = new Apple; 

নীচের সমস্ত বিবৃতি চয়ন করুন যা সত্য:

ক) আপেল* গ্র্যানি_স্মিথ = NULL; if (granny_smith == NULL)... এটা ঠিক নয় - NULL এমন একটি মান নয় যা এইভাবে চেক করা যায়।
খ) আপেল* গ্র্যানি_স্মিথ, ফুজি; এটি অ্যাপল অবজেক্টে দুটি পয়েন্টার ঘোষণা করে
গ) গ্র্যানি_স্মিথ ভেরিয়েবলে অ্যাপল অবজেক্টের সাথে যুক্ত ইনস্ট্যান্স ভেরিয়েবল মান রয়েছে
ঘ) আপেল* গ্র্যানি_স্মিথ = NULL; এই ঠিক আছে,
ঙ) granny_smith ভেরিয়েবলে একটি Apple অবজেক্টের ঠিকানা থাকে
চ) স্ট্রিং gs_color = *(granny_smith.get_color()); এই বিবৃতিটি granny_smith অবজেক্টের রঙ ফেরত দেয়, ধরে নেয় যে এটি আরম্ভ করা হয়েছে।
ছ) নতুন Apple অবজেক্টের জন্য স্টোরেজ হিপে বরাদ্দ করা হয়েছে
জ) নতুন Apple অবজেক্টের জন্য সঞ্চয়স্থান রানটাইম স্ট্যাকে বরাদ্দ করা হয়েছে
আমি) int*a = &b; এটি a এর মধ্যে b এর ঠিকানা রাখে।


প্রশ্ন 3) নিম্নলিখিত প্রোগ্রামের আউটপুট কি?

#include <iostream>
using namespace std;

const int kNumVeggies = 4;

void Grill(int squash, int *mushroom);
int Saute(int onions[], int celery);


void Grill(int squash, int *mushroom) {
  *mushroom = squash/4;
  cout << *mushroom + squash << endl;
}

int Saute(int onions[], int celery) {
  celery *= 2;
  onions[celery]++;
  Grill(onions[0], &onions[3]);
  cout << celery << " " << onions[3] << endl;
  return celery;
}

int main() {
  int broccoli, peppers[kNumVeggies], *zucchini;

  for (broccoli = 0; broccoli < kNumVeggies; broccoli++)
    peppers[broccoli] = kNumVeggies - broccoli;
  zucchini = &peppers[Saute(peppers,1)];
  Grill(*zucchini, zucchini);
  zucchini--;
  cout << peppers[3] + *zucchini + *(zucchini + 1) << endl;
}


কুইজ উত্তর

উপরের সবগুলো প্রশ্নের উত্তর না দেখেই শেষ করার চেষ্টা করা উচিত। সাহায্যের জন্য সরাসরি উত্তরপত্রে ঝাঁপিয়ে পড়ার চেয়ে কারো কাছে সাহায্য চাওয়া ভালো।

আপনি এখানে উপরের সমস্যার উত্তর দেখতে পারেন।