在C ++中复制Python函数

时间:2014-05-29 20:44:18

标签: c++ function python-3.x

我最近从C切换到OOP语言 - C++Python 3.4

我注意到Python C++可以击败str="hello world " str.strip().split() 的相当多的东西 其中一个是调用功能的便利性。

所以我决定以某种方式使用STL实现在C ++中进行函数调用的python方式。

我开始使用'字符串'类。

在Python中,我可以这样做:

object.func1().func2().func3()

首先,剥离字符串末尾的尾部空格,然后将字符串分成两半的空格

现在 NEAT 并且我喜欢能够以这种方式调用函数,即class MYstring { string str; public: //constructor MYstring(string str) { setter(str); } //setter function MYstring& setter( string str ) { this->str=str; return *this; } //getter_str function string getter_str() { return str; } unsigned int getter_size() { return str.size(); } //modifier function(s) MYstring& split(char x='\0') { string temp=""; for(int i=0; i<str.size(); i++) { if(this->str[i-1] == x) break; temp += str[i]; } this->str=temp; return *this; } MYstring& strip() { for(int i=this->str.size() - 1; i>=0; i--) { if(this->str[i] == ' ') this->str.erase(i); else if(isalnum(this->str[i])) break; } return *this; } }; 等等

因为我完全不知道stl class&#39; string&#39;,我开始使用自己制作的课程&#39; MYstring&#39;

main()

为了测试类及其成员函数,我使用了以下int main() { //take a user-defined string-type input string input; cout<<"Enter a string: "; getline(cin,input); // create an object of class 'MYstring' // and initialise it with the input given by the user MYstring obj(input); //take the character at which the string must be split cout<<"\nEnter character to split the string at: "; char x; cin>>x; //display original input cout<<"\n\nThe user entered: "<<obj.getter_str(); cout<<"\nSize = "<<obj.getter_size(); obj.strip().split(x);// <--- python style function call cout<<"\n\nAfter STRIP and SPLIT: "<<obj.getter_str(); cout<<"\nSize = "<<obj.getter_size(); return 0; }

split

并且有效

所以,最后我的问题是:

如何为strip创建和使用相同的C++ STL string class和{{1}}函数? 是否可以在STL中使用我们自己创建的方法?

欢迎提出任何建议。

2 个答案:

答案 0 :(得分:0)

您可以扩展类std :: string并使用扩展类。因此,您的类将具有STL字符串的所有功能以及其他方法。

class mystring: public std::string {
   ...
};

答案 1 :(得分:0)

根据经验以及评论中明确标记的链接所涵盖的主题,我不会继承STL类,而是创建自己的类,因为你已经完成了。

但是,除了std :: string复制构造函数之外,您还可以添加一个类型转换为std :: string的运算符重载,因此很容易将代码转换为对象和std: :使用带有std :: string的库时的字符串。