2016-10-11 3 views
-1

私はPythonから来て、C++を使い始めるつもりですが、C++のクラスパラメータにアクセスする方法を理解できないようです。私は3つのC++ファイルと同様にPythonクラスの例を添付しました。クラスメソッドのコンストラクタパラメータへのアクセス

これは、Pythonの場合:

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

say_name方法でself.nameインスタンスのparamにアクセスするためのC++と同等でしょうか?

今これは私が持っているものです。

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メソッドにアクセスできないため、これは明らかに実行されません。だから誰かが私はクラスのメソッド(上記のPythonの例に似ている)でC + +のコンストラクタparamsにアクセスする方法について説明することができますか?

私はあなたが1 parametarと宣言コンストラクタを持ってXCodeの上8.おかげ.HPPで

+2

基本的なC++を学習するのははるかに簡単で生産的です。また、PythonとC++の間に直接の同等物がないかもしれないことに注意してください。 – juanchopanza

+0

C++では、変数(パラメータなど)と同じ名前を関数に使用するのは普通ではありません –

答えて

2

は、あなたが持っている:

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

をC++を実行していますよ。 .cppにはが定義されており、2つのパラメータを持つコンストラクタが定義されています。

彼らは一致する必要があります。

また、学習目的でクラスを2つのファイルに分ける必要はありません。メソッド定義をクラス外に書く必要はありません。あなたのpythonのコードで

+0

これはコメントでなければなりません。 – juanchopanza

+0

@dimmを入力してくれてありがとうございます。しかし、質問は@R Sahuが回答したオブジェクトのアスペクトのほうに焦点を当てました。構文上の側面ではありません(すでにコードは実行されていないと述べたので)。 – ralston

+0

また、なぜdownvote – ralston

関連する問題