构造函数,析构函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造函数,析构函数相关的知识,希望对你有一定的参考价值。

今天女朋友问我那错了,我一看,好长啊,就难得看了,然后她去问别人,还是没结果。中午又来问我。-_-伤不起

他的错误是没有构造函数,所以编译器会出现错误;

源代码如下:

#include <iostream.h>
#include<string>
class String
{
    char string1;
    char string2;
public:
    String(char st1,char st2)
    {
        string1=st1;
        string2=st2;
    }
    friend void inputstring(String &str);
    friend String strcat(String& s1,String &s2);
    friend String strcpy(String& s1,String &s2);
    friend String strcmp(String& s1,String &s2);
    friend void outputstring(String &str);
};
 void inputstring(String &str)
 {
     cin>>str.string1;
     cin>>str.string2;
 }
String strcat(String& s1,String &s2)
{
    String s;
    s=strcat(s1,s2);
    return s;
}
String strcpy(String& s1,String &s2)
{
    String s;
    s=strcpy(s1,s2);
    return s;
}

String strcmp(String& s1,String &s2)
{
    String s;
    s=strcmp(s1,s2);
    return s;
}
void outputstring(String &str)
{
    cout<<"("<<str.string1<<","<<str.string2<<")";
}
void main()
{
    String s1,s2;
    cout<<"请输入第一个字符串:"<<endl;
    inputstring(s1);
    cout<<"请输入第二个字符串:"<<endl;
    inputstring(s2);
}


        

因为错误,所以编译器显示:no appropriate default constructor available

原因是没有缺省构造函数,而且其中的String()里面已经有了参数,所以系统不能给他自动构造一个

所以我改了如下:

#include <iostream.h>
class String
{
    char string1;
    char string2;
public:
    String()
    {
        char st1,char st2;
        string1=st1;
        string2=st2;
    }
    ~String()
    {}
    friend void inputstring(String &str);
    friend String strcat(String& s1,String &s2);
    friend String strcpy(String& s1,String &s2);
    friend String strcmp(String& s1,String &s2);
    friend void outputstring(String &str);
};
 void inputstring(String &str)
 {
     cin>>str.string1;
     cin>>str.string2;
 }
String strcat(String& s1,String &s2)
{
    String s;
    s=strcat(s1,s2);
    return s;
}
String strcpy(String& s1,String &s2)
{
    String s;
    s=strcpy(s1,s2);
    return s;
}

String strcmp(String& s1,String &s2)
{
    String s;
    s=strcmp(s1,s2);
    return s;
}
void outputstring(String &str)
{
    cout<<"("<<str.string1<<","<<str.string2<<")";
}
void main()
{
    String s1,s2;
    cout<<"请输入第一个字符串:"<<endl;
    inputstring(s1);
    cout<<"请输入第二个字符串:"<<endl;
    inputstring(s2);
}

所以能够运行,没有出错,但是女朋友还是没有得到结果,因为他其他地方写错了,只能说不够细心,我在这只是提下编译器显示错误原因;对于改正吗,我就让她自己搞了。

大牛勿喷,小白一个。

以上是关于构造函数,析构函数的主要内容,如果未能解决你的问题,请参考以下文章

9. 构造函数和析构函数

c++ 复制构造函数和析构函数

构造函数和析构函数

构造/析构/赋值运算

dotnet C# 如果在构造函数抛出异常 析构函数是否会执行

php 中构造函数和析构函数