在类方法中访问构造函数参数

时间:2016-10-11 19:30:10

标签: c++ c++11

我来自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

self.name方法中访问say_name实例参数的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参数,因此无法运行。那么有人可以解释如何/如果我可以在类方法中访问C ++构造函数参数(类似于上面的Python示例)?

我在XCode上运行C ++ 8.谢谢

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

在.hpp中,你有声明的构造函数和一个参数。 在.cpp中,您有已定义的构造函数,其中包含2个参数。

他们需要匹配。

而且,出于学习目的,您不需要在两个文件中分隔该类。您甚至不必在类之外编写方法定义。