我来自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.谢谢
答案 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个参数。
他们需要匹配。
而且,出于学习目的,您不需要在两个文件中分隔该类。您甚至不必在类之外编写方法定义。