Переменная класса C ++, возвращающая бред

0

У меня возникают проблемы с одним из моих заданий домашней работы C++. Мы используем класс для распечатки списка телефонных номеров, но мне трудно понять, как заставить числовую переменную печатать значения по умолчанию, которые мы должны использовать с нашими конструкторами.

Если бы кто-нибудь из вас мог указать мне в правильном направлении, с примером или тому подобным, я был бы очень признателен!

#include <iostream>
#include <string>

class PhoneNumber { //This class will help the user make a list of phone numbers)
        private:
                int countryCode; //Stores the Country Code e.g. +1
                int areaCode; //Stores Area Code e.g. (925)
                int number; //Stores Number e.g. 754-6978
                char type; //Stores the "type" of number. e.g. 'H' for home, 'B' for business, 'C' for cell.
                int year; //Stores the year the number was added, for some odd reason.
        public:
                PhoneNumber(); //Empty constructor
                PhoneNumber(int ccode, int acode, int num, char line, int year);
                PhoneNumber(int num, char line = 'B');
                PhoneNumber(int acode, int num, char line = 'C');
                void setCountry(int ccode);
                void setArea(int acode);
                void setNumber(int num);
                void setType(char line);
                void setYear(int yr);
                int getCountry() const;
                int getArea() const;
                int getNumber() const;
                char getType() const;
                int getYear() const;
                bool doubleDigits() const;
                void printNumber() const;
                void printPhoneNumberStats() const;
};

//The Default Constructor
PhoneNumber::PhoneNumber() {
        void setCountry(int ccode  = 43);
        void setArea(int acode = 800);
        void setNumber(int num = 8675309);
        void setType(char line = 'H');
        void setYear(int year = 1981);
}

//Fill out the Phone Number class
PhoneNumber::PhoneNumber(int ccode, int acode, int num, char line, int year) {
}

PhoneNumber::PhoneNumber(int num, char line) {
}

PhoneNumber::PhoneNumber (int acode, int num, char line) {
}

int PhoneNumber::getCountry() const {
        return countryCode;
}

int PhoneNumber::getArea() const {
        return areaCode;
}

int PhoneNumber::getNumber() const {
        return number;
}

char PhoneNumber::getType() const {
        return type;
}

int PhoneNumber::getYear() const {
        return year;
}

bool PhoneNumber::doubleDigits() const {
}  

void PhoneNumber::printNumber() const {
        std::cout << number << std::endl;
}

void PhoneNumber::printPhoneNumberStats() const {

}

Это все мои функции. Тогда есть int main(), который мы должны использовать.

int main() {
        PhoneNumber firstNum;
        PhoneNumber secondNum(39, 415, 867666, 'B', 2012);
        PhoneNumber thirdNum(1212121);
        PhoneNumber fourthNum(1234566, 'C');
        PhoneNumber fifthNum(925, 4392181);
        PhoneNumber sixthNum(925, 5512346, 'H');
        firstNum.printNumber();
/*      firstNum.printPhoneNumberStats();
        secondNum.printNumber();
        secondNum.printPhoneNumberStats();
        thirdNum.printNumber();
        thirdNum.printPhoneNumberStats();
        fourthNum.printNumber();
        fourthNum.printPhoneNumberStats();
        fifthNum.printNumber();
        fifthNum.printPhoneNumberStats();
        sixthNum.printNumber();
        sixthNum.printPhoneNumberStats();
*/
        return 0;
}

Если вы можете объяснить, почему я получаю мусор, когда пытаюсь напечатать числовую переменную и как ее исправить, я был бы благодарен. Конечно, любые другие рекомендации также будут оценены.

Спасибо! Кейтлин

Теги:
class
function
variables

2 ответа

2

Ваш PhoneNumber умолчанию PhoneNumber (PhoneNumber::PhoneNumber()) фактически не инициализирует ни одну из переменных-членов;

PhoneNumber::PhoneNumber() {
    void setCountry(int ccode  = 43);
    void setArea(int acode = 800);
    void setNumber(int num = 8675309);
    void setType(char line = 'H');
    void setYear(int year = 1981);
}

Эти строки ничего не инициализируют - они объявляют функции, они не вызывают существующие функции в объекте.

Чтобы иметь конструктор по умолчанию, который инициализирует значения членов, вы можете сделать это:

PhoneNumber::PhoneNumber()
    : countryCode(43), areaCode(800), number(8675309), type('H'), year(1981)
{
}

Или, если вы хотите использовать функции "set", вызовите их следующим образом:

PhoneNumber::PhoneNumber() {
    setCountry(43);
    setArea(800);
    setNumber(8675309);
    setType('H');
    setYear(1981);
}
  • 0
    Спасибо! Это действительно помогло.
0

number никогда не инициализируется. Ваш printNumber() должен построить number (который должен быть string если вы хотите - в нем) от других членов класса, THEN распечатать его.

Итак, ваш printNumber() должен выглядеть примерно так...

void PhoneNumber::printNumber() const {
    number = //whatever you need to do to initialize it
    std::cout << number << std::endl;
}

Если вы не собираетесь использовать свои методы constructor для инициализации number.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню