2014-12-31 1 views
-7

Может ли кто-нибудь объяснить мне несколько строк?Значение нескольких строк в C++

1) char * Буфер; Что мы делаем с этим? Объявление указателя типа char? Почему мы не инициализируем его?

2) MyString (Const символ * InitialInput) Так что застройщик (метод) занимает некоторую строку, превращает ее в константу, в основном, и присваивает его адрес? Почему постоянный и почему указатель? Почему мы не можем просто написать char InitialInput?

3) const char * InitialInput Почему здесь есть оператор derefernce, а также константа? Насколько я понимаю, это метод? Что случилось с написанием char GetString()?

Изменения некоторых из них до того, как я «хочу» результаты в устаревших преобразований из строковой константы в «символ *» Не уверен, что это значит ...

#include <iostream> 
#include <string.h> 
using namespace std; 

class MyString 
{ 
private: 
    char* Buffer; 

public: 
    // constructor 
    MyString(const char* InitialInput) 
    { 
     if(InitialInput != NULL) 
     { 
      Buffer = new char [strlen(InitialInput) + 1]; 
      strcpy(Buffer, InitialInput); 
     } 
     else 
      Buffer = NULL; 
    } 
    // destructor 
    ~MyString() 
    { 
     cout << "Invoking destructor, clearing up" << endl; 
     if (Buffer != NULL) 
      delete[] Buffer; 
    } 

    int GetLength() 
    { 
     return strlen(Buffer); 
    } 

    const char* GetString() 
    { 
     return Buffer; 
    } 
}; 

int main() 
{ 
    MyString SayHello("I am saying hello to you!"); 
    cout << "String buffer in MyString is " << SayHello.GetLength(); 
    cout << " charecters long" << endl; 

    cout << "Buffer contains: " << SayHello.GetString() << endl; 
} 
+7

Вам необходимо изучить основы языка. – Barmar

+1

Здесь [получить книгу] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – Hiura

+2

Как предлагает @Barmar, получить [хорошую книгу на C++] (http : //stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) и начните с первой главы - вы не можете научиться программировать с помощью догадки –

ответ

0

char* обычно используются для укажите первый элемент в массиве char s, где один из char s в массиве равен \0 и обозначает конец строки. Мы ссылаемся на такие char* s, как Строки в стиле C. То есть этот тип представляет строку символов, тогда как один char представляет только один символ.

A const char* аналогичен (по-прежнему является строкой в ​​стиле C), но говорит, что мы не хотим изменять char s, на которые указываются (нам остается только посмотреть на них).

char* Buffer; является членом класса MyString. Да, он не инициализируется, но назначается в конструкторе класса. Это происходит до любого другого использования члена, поэтому оно безопасно.

Конструктор принимает const char*, потому что ему нужна строка символов для заполнения Buffer. GetString возвращает const char*, потому что он возвращает строку символов из Buffer.

+0

Хм, спасибо большое. Я знаю о большинстве этих фактов отдельно, но просто не мог поместиться в моей голове. Например, я не знал, что вы должны написать const char * для метода возврата, потому что это просто показалось неестественным, поскольку мы ничего не объявляем здесь и просто возвращаемся.Но я думаю, что все это более или менее имеет смысл сейчас. Еще раз спасибо. Не знаю, почему люди такие безумные :) – Max

+0

@Max 'const char *' - это тип. Вы можете использовать его везде, где ожидается тип. Тип возврата - тип. Тип аргумента - это тип. –

Смежные вопросы