继承:类字符串

Inheritance: class string

本文关键字:字符串 继承      更新时间:2023-10-16

我遇到了一个作业,它需要一个名为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赋值操作符