构造函数,析构函数

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

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

源代码如下:

#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);
}

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

大牛勿喷,小白一个。

时间: 2024-11-07 18:25:36

构造函数,析构函数的相关文章

C\C++ vector 构造函数 &amp; 析构函数

#include <iostream> #include <vector> using namespace std; class Obj { public: Obj(void){cout<<"Obj(void)"<<" "<<countOne<<endl;countOne++;} Obj(int x){cout<<"Obj(int x)"<<"

C++反汇编第一讲,认识构造函数,析构函数,以及成员函数

C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { public: MyTest(); ~MyTest(); public: DWORD m_dwTest; }; MyTest::MyTest() { printf("1111\r\n"); //构造的时候先打印 } MyTest::~MyTest() { printf("2222

【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy

1.构造函数 类的初始化即为构造函数.也为:隐式的初始化. 构造函数在对象初始化的时候,自动被调用.隐式的调用. 构造函数分为三种:有参构造函数.无参构造函数.拷贝构造函数. 有参构造函数调用有三种:括号法.等号法.手工法. #include <iostream> using namespace std; class Test { private: int m_a; public: Test()//无参构造函数 { } Test(const Test &obj)//拷贝构造函数 { }

C++基础知识---构造函数 &amp; 析构函数 &amp; 虚拟析构函数

问题: 类需要一个无参的构造函数么? 类需要一个析构函数么? 类的构造函数需要初始化所有的对象成员么? 类需要一个虚析构函数么? 有些类需要虚析构函数只是为了声明他们的析构函数是虚的.绝不会用作基类的类是不需要虚析构函数的:任何虚函数只在继承的情况下才有用.假设B为父类,D为子类,B何时需要一个虚析构函数?只有有人肯呢过会对实际指向D类型对象的B*指针执行delete表达式,你就需要给B加上一个虚析构函数,即使B和D都没有虚函数,这也是需要的 B* bp = new D; Delete bp; 

构造函数 析构函数

;构造函数 构造函数和类同名,无类型和返回值 构造函数可以重载 构造函数编译器在对象申请完内存地址空间之后帮你调用,如果有父类先一层层的调完父类的构造函数最后子类 ;析构函数 析构函数只调用一次 析构函数在出对象所属作用域之后立马被调用 析构函数无类型,返回值参数 西沟函数可以外部手工调用 ;拷贝构造函数 拷贝构造函数参数为引用参数 类& object 拷贝构造函数在发生对象拷贝的时候被调用,例如函数传参如果形参是对象类型就会发生,其他类型不会, (const 类& object) 如果实

构造函数 析构函数需要注意的

构造函数和析构函数¶ 构造函数¶ void __construct ([ mixed $args [, $... ]] ) PHP 5 允行开发者在一个类中定义一个方法作为构造函数.具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作. Note: 如果子类中定义了构造函数则不会隐式调用其父类的构造函数.要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct().如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继

c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A(void);//缺省的无参数构造函数 A(const A&a);//缺省的拷贝构造函数 -A();//缺省的析构函数 A&operator=(const A &a);//缺省的赋值构造函数 1).“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘

C++ 中的类构造函数 &amp; 析构函数

类的构造函数 类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行. 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void.构造函数可用于为某些成员变量设置初始值. 下面的实例有助于更好地理解构造函数的概念: 1 #include <iostream> 2 3 using namespace std; 4 5 class Line 6 { 7 public: 8 void setLength( double len ); 9 double getLe

C++ 构造函数+析构函数

3-2 构造函数的调用 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握构造函数和析构函数的调用: 创建类A:类中仅包含构造函数和析构函数,按照程序的输出写出类的定义和主函数main中的代码. 输入 无 输出 输出数据有4行,分别代表对构造函数和析构函数的调用:本练习要求所编写程序的输出必须与示例相同. 示例输入 无 示例输出 Constructing an object of A Constructing an object o

虚函数-构造函数-析构函数

在C++里面,虚函数的作用就是  实现 多态 构造函数可以是  虚函数,但是这样做没有多大意义,特别是在有继承关系的时候估计就不行了,没有继承关系的时候,这个类就不会被创建,编译应该是没有问题的, 析构函数 在有继承的时候,经常用虚函数,因为在  子类有实例的时候,如果让父亲的指针指向  子类的实例,而子类的实例中有new了新的地址空间,那么调用父亲的析构函数,如果父亲的析构函数不是虚的,那么只负责把父亲自己的指针回收,但是子类中new就没有回收:而如果析构函数是虚函数,那么首先是释放子类申请的