继承:类字符串
Inheritance: class string
我遇到了一个作业,它需要一个名为string_extend的自构建类,继承自类string。下面的string_extend类是我的代码,main()部分是作业所要求的部分。
class string_extend:public string{
public:
string_extend(const string& str):string(str){}
};
int main(){
string_extend a("amd");
string_extend b(a);
cout<<a<<b;
}
谁能给任何提示如何继承所有的函数从类字符串?
谁能给点提示如何从类
string
继承所有的功能?
你的代码已经这样做了。然而,你的main
没有使用任何string
的成员函数;它使用构造函数,这些构造函数是不可继承的,除非你告诉编译器(见下文)。
为了使用基类中的构造函数,您需要在派生类中定义具有相同签名的构造函数。您为使用string&
的构造函数这样做了,但不用于main
正在使用的其他构造函数。
在c++ 03中,与第一个构造函数相同,即
string_extend(const char* str):string(str){}
1 . 演示
在c++ 11中可以继承构造函数:
class string_extend:public string{
public:
using string::string;
};
演示2。通过公开声明string作为基类,您的类已经继承了string的方法。
您的类已经从类string
继承了方法。您可以使用诸如append或insert之类的方法。
公共继承意味着string
中的所有公共方法在你的类中都是公共的,protected和private在你的类中也是一样的。
你可以这样使用你的对象:
string_extend obj("Hello world");
string_extend obj2("Test");
obj.append(obj2);
您可以访问std::string类的成员函数,而无需在派生类中重新声明它们。
类的简化版本可以如下所示
#include <iostream>
#include <string>
int main()
{
class string_extend : public std::string
{
public:
using std::string::string;
using std::string::operator =;
string_extend() : std::string() {}
string_extend( const string_extend &src ) : std::string( src ) {}
string_extend & operator =( const string_extend &src )
{
std::string::operator =( src );
return *this;
}
};
string_extend s1;
string_extend s2( { 'A', 'B', 'C' } );
string_extend s3( "Hello" );
string_extend s4( 8, '*' );
std::cout << s1.size() << std::endl;
std::cout << s2.size() << std::endl;
std::cout << s3.size() << std::endl;
std::cout << s4.size() << std::endl;
std::cout << """ << s1 << """ << std::endl;
std::cout << """ << s2 << """ << std::endl;
std::cout << """ << s3 << """ << std::endl;
std::cout << """ << s4 << """ << std::endl;
s4 += { 'A', 'B', 'C' };
std::cout << """ << s4 << """ << std::endl;
}
程序输出为
0
3
5
8
""
"ABC"
"Hello"
"********"
"********ABC"
如果你愿意,你也可以添加move构造函数和move赋值操作符