-1

私は C++ の初心者で、次の問題があります。祖父母、親、子の 3 つのクラスがあります。考え方はこんな感じ

#include <iostream>
#include <stdlib.h>
#include <string.h>

class Book
{   protected: 
        long int number; 
        char author[25];
        int year;
        bool lent;

        void setLent(bool x);
        bool getLent(); 
    public: 
        Book(long int n, char a[25], int j, bool x);
        long int getNr();
        int getYear();
        void print();
        };


class UBook: public Book
{   protected: 
        int categ;
        char country[15];
    private:
        int for_age;   
    public: 
        UBook(int t, int k, char l[15]);
        void setAge(int a);
        int getAge();
        };      


class PicBook: public UBook
{   private:
        static const int for_age=6;
    public: 
        PicBook(long int n, char a[25], int j,int k, char l[15]);
        };      

Book::Book(long int n, char a[25], int j, bool x)
    {number=n;
    strncpy(author, a, 25);
    year=j;
    lent=x;}

long int Book::getNr()
    {return number; }

int Book::getYear()
    {return year;}

void Book::setLent(bool x)
    {lent=x;}

bool Book::getLent()
    {return lent;}

void Book::print()
    {
    std::cout << "Booknumber: " << number << std::endl;
    std::cout << "Author: " << author << std::endl;
    std::cout << "Year: " << year << std::endl;
    if (lent==0)
    std::cout << "Lentiehen [ja/nein]: nein" << std::endl;
    else
    std::cout << "Lentiehen [ja/nein]: ja" << std::endl;
    }

UBook::UBook(int t, int k, char l[15]): Book(number, author, year, lent)
    {for_age=t;
    categ=k;
    strncpy(country, l, 15);
    }

void UBook::setAge(int a)
    {for_age = a;} 

int UBook::getAge()
    {return for_age;}      


PicBook::PicBook(long int n, char a[25], int j,int k, char l[15]): UBook(for_age, categ, country)
    {
    std::cout << "Booknumber: " << number << std::endl;
    std::cout << "Author: " << author << std::endl;
    std::cout << "Year: " << year << std::endl;
    std::cout << "For age: " << for_age << std::endl;
    std::cout << "Categorie: " << categ << " [Bildband]" << std::endl;
    std::cout << "Country: " << country << std::endl;
    }


int main()
{   
    PicBook somebook(356780, "test", 2010, 4, "France");

    system("pause");
    return 0;
}

ただし、「子」でテスト出力を行うと、奇妙な出力が表示されます。

Book Nr: 4283296
Author: ð■(
Year: 1988844484
For age: 6 /*(the only correct output)*/
Categorie: 2686760 [Bildband]
Country: ♠\A
Press any key to continue . . .

そのため、パラメーターが正しく渡されません。最初の 3 つのパラメーターは、祖父母クラスのメンバーであり、最後の 2 つは親クラスのメンバーです。「子」のコンストラクターに問題があると思います。

事前にご協力いただきありがとうございます。

4

2 に答える 2

1

OMG私は解決策を見つけました。実際、それはすっごく簡単でした。std::couts: を変更するだけで済みました。

PicBook::PikBook(long int n, char a[25], int j,int k, char l[15]): UBook (for_age, categ, country)
    {
    std::cout << "Book Nr:: " << n << std::endl;
    std::cout << "Author: " << a << std::endl;
    std::cout << "Year: " << j << std::endl; 
    std::cout << "Category: " << k << " [Picture Book]" << std::endl;
    std::cout << "country: " << l << std::endl;
    }
于 2014-10-20T22:34:00.763 に答える