2016-10-11 5 views
-1

Я прихожу из Python и пытаюсь начать работу с C++, но, похоже, мне не удается выяснить, как получить доступ к параметрам класса на C++. Я добавил пример Python-класса, а также мои 3 C++-файла.Доступ к параметрам конструктора в методе класса

Если это Python:

class Greeting: 
    def __init__(self, name): 
     self.name = name 
    def say_name(self): 
     return "Hello, %s" % self.name 

Что бы эквивалент C++ доступа к self.name экземпляра параметров в методе say_name?

Прямо сейчас это то, что у меня есть:

greeting.hpp

class greeting 
{ 

public: 

    greeting(std::string name); 
    ~greeting(); 

    std::string salutation(std::string salutation); 

private: 

    // Nothing 

}; 

greeting.cpp

#include "greeting.hpp" 

greeting::greeting(std::string name, std::string nationality) 
{ 
    std::cout << "greeting class constructed\n"; 

} 

greeting::~greeting() 
{ 

} 

std::string greeting::salutation(std::string salutation) 
{ 
    std::string res = salutation + ", " + name; 
    return res; 
} 

main.cpp

#include <iostream> 
#include "greeting.hpp" 

int main(int argc, const char * argv[]) { 

greeting obj = greeting("Rashad", "American"); 

std::string word = "Hello"; 

std::cout << obj.salutation(word) << std::endl; 

return 0; 
} 

Очевидно, что это не будет работать, потому что параметр name в методе greeting::salutation недоступен. Так может кто-нибудь объяснить, как/если я могу получить доступ к параметрам конструктора C++ в методах класса (аналогично приведенному выше примеру Python)?

Я Запуск C++ на XCode 8. Благодаря

+2

Было бы намного проще и продуктивно изучить некоторые базовые возможности C++. Также имейте в виду, что не может быть прямого эквивалента между python и C++. – juanchopanza

+0

В C++ нетрадиционное использование того же имени для функции, что и для переменной (параметр или иначе) –

ответ

2

В коде Python, у вас есть:

self.name = name 

Объект имеет переменную-член под названием name, которая хранит данный вход. Вам нужно что-то подобное в классе C++.

class greeting 
{ 
    public: 

    greeting(std::string name); 
    ~greeting(); 

    std::string salutation(std::string salutation); 

private: 

    // Add name as a private member 
    std::string name_; 

}; 

и убедитесь, что имя хранится в переменной-члене в конструкторе.

greeting::greeting(std::string name) : name_(name) 
{ 
    std::cout << "greeting class constructed\n"; 
} 

Вы можете использовать переменную name_ члена в других функций-членов.

std::string greeting::salutation(std::string salutation) 
{ 
    std::string res = salutation + ", " + name_; 
    return res; 
} 
0

в .hpp у вас есть объявлен конструктор с одним parametar. В .cpp у вас есть конструктор с 2 параметрами.

Они должны соответствовать.

А также для обучения вам не нужно выделять класс в двух файлах. Вам не нужно даже писать определения метода вне класса.

+0

Это должен быть комментарий. – juanchopanza

+0

Спасибо за вход @dimm, но вопрос фокусируется на большей части аспекта объекта, на который ответил @R Sahu, не столько на синтаксическом аспекте (как я уже говорил, что код не запускался). – ralston

+0

Также не уверен, почему downvote – ralston

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