Saya telah coding di Turbo C++ mengenai multiple inheritance dan tujuan dari kode ini adalah untuk hanya mengambil input dan mencetak input di konsol. Saya telah melakukan kode berikut pada awalnya,

// Program to demonstrate multiple inheritance

#include <conio.h>
#include <iomanip.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>>
#include <string.h>

class Company1
{
protected:
  int productID;
  char *productName;
  char *CompanyName;

public:
  void input_c1()
  {
    cout << "Provide Company 1 Details : " << endl;
    cout << setw(29) << setfill('-') << "" << endl;
    cout << "Enter the Product ID : ";
    cin >> productID;
    cout << "Enter the Product Name : ";
    gets(productName);
    cout << "Enter the Company Name : ";
    gets(CompanyName);
  }
};

class Company2
{
protected:
  int productID;
  char *productName;
  char *CompanyName;

public:
  void input_c2()
  {
    cout << endl << "Provide Company 2 Details : " << endl;
    cout << setw(29) << setfill('-') << "" << endl;
    cout << "Enter the Product ID : ";
    cin >> productID;
    cout << "Enter the Product Name : ";
    gets(productName);
    cout << "Enter the Company Name : ";
    gets(CompanyName);
  }
};

class SuperMarket : public Company2, public Company1
{
public:
  void Company_details()
  {
    cout << endl << "Company 1 details : " << endl;
    cout << setw(20) << setfill('-') << "" << endl;
    cout << "Product ID   : " << Company1::productID << endl;
    cout << "Product Name : ";
    print_string(Company1::productName);
    cout << endl;
    cout << "Company Name : ";
    print_string(Company1::CompanyName);
    cout << endl << endl;

    cout << "Company 2 details : " << endl;
    cout << setw(20) << setfill('-') << "" << endl;
    cout << "Product ID   : " << Company2::productID << endl;
    cout << "Product Name : ";
    print_string(Company2::productName);
    cout << endl;
    cout << "Company Name : ";
    print_string(Company2::CompanyName);
  }
  void print_string(char *ptr)
  {
    for (int i = 0; i != strlen(ptr); i++)
      cout << ptr[i];
  }
};

void main()
{
  char choice;
  clrscr();
  SuperMarket s;
  s.input_c1();
  s.input_c2();
  s.Company_details();
  cout << endl << "Do you want to exit ? (Y/N) : ";
  cin >> choice;
  if (choice == 'Y' || choice == 'y')
    exit(0);
  getch();
}

Dan dapatkan output sebagai berikut saat dieksekusi,

Click here to see the output

Namun bukan itu keluaran yang diharapkan karena Nama Perusahaan dari Perusahaan1 adalah dklm melainkan diharapkan menjadi def< /kuat>. Saya selanjutnya mencoba memperbaikinya dan menjadikan jenis turunan Perusahaan1 sebagai publik virtual dan ini menghasilkan keluaran yang benar. Saya mendengar bahwa virtual sebagian besar digunakan dalam kasus Masalah berlian. Meskipun bukan masalah Berlian, ini menghasilkan keluaran yang benar. Adakah yang bisa menjelaskan mengapa saya mendapatkan output yang salah dalam program yang disebutkan dan bagaimana virtual dibuat untuk menjalankan program dengan benar dalam kasus ini?

0
Kiran Deep 19 April 2020, 21:41

1 menjawab

Jawaban Terbaik

Pointer productName dan CompanyName tidak diinisialisasi, jadi Anda tidak dapat menggunakannya seolah-olah menunjuk ke penyimpanan yang valid untuk beberapa karakter. Anda hanya harus menggunakan std::string daripada char* pointer, untuk menyelamatkan diri dari ini dan banyak masalah lainnya.

Meskipun Turbo C++ tidak memiliki std::string, tetapi mungkin Anda dapat menemukan kelas string yang bagus untuk itu jika Anda harus menggunakan kompiler tersebut. Saya tidak dapat membantu lebih banyak dengan itu, karena Turbo C++ bahkan hampir tidak dihitung sebagai C++ pada saat ini.

4
aschepler 19 April 2020, 19:49