构造函数的一个小问题

// 精简过的代码,两个构造函数如下:

simple_string::simple_string()
{
 str=new char[1];
 len=0;
 str[0]=NULL;
}

 

simple_string::simple_string(int n)
{
 len=n;
 str=new char[len+1];
 for(int i=0;i<n;i++) str[i]='0';
 str[len]=NULL;
}

 

// 一个赋值操作符

simple_string& simple_string::operator =(char c)
{
    len = 1;
    delete[] str;
    str = new char[2];
    str[0] = c;
    str[1] = 0;

 return *this;
}

 

如果我这样调用:

      simple_string s0 = 'a';
    cout << endl << "s0 = "<< s0 << "|||" << endl;

打印出97个0, 在vc上调试发现调用的是simple_string::simple_string(int n)构造函数

 

如果这样调用:

      simple_string s0;
      s0 = 'a';
    cout << endl << "s0 = "<< s0 << "|||" << endl;

则调用赋值操作,输出为 a


开始很纳闷,于是翻书补课,发现如果在定义时给变量赋初值,此时的赋值操作实际上是初始化操作,即调用构造函数而非赋值操作符(见C++ Primer 2.2.3)。

根据C语言定义,'a'为int类型,因此调用的是simple_string::simple_string(int n)构造函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C++ 中,一个类可以定义多个构造函数,以便在创建对象能够根据不同的参数列表选择合适的构造函数进行对象的初始化。 一个类可以有以下几种类型的构造函数: 1. 默认构造函数:没有参数的构造函数被称为默认构造函数,如果没有定义构造函数,则编译器会提供一个默认构造函数,用于创建对象对对象进行默认初始化。 2. 带参数的构造函数:带有参数的构造函数可以根据参数列表的不同进行重载,用于创建对象对对象进行带参数的初始化。 3. 拷贝构造函数:用于在创建对象一个已有对象的拷贝给新对象,以便新对象和已有对象的属性相同。 一个类可以同定义多个构造函数,它们之间可以通过参数列表的不同进行重载,以便在创建对象选择合适的构造函数进行对象的初始化。 下面是一个例子,展示了一个类中同定义了多个构造函数: ```c++ class MyClass { public: MyClass() { std::cout << "Default constructor" << std::endl; } MyClass(int x) { std::cout << "Constructor with one parameter" << std::endl; } MyClass(int x, int y) { std::cout << "Constructor with two parameters" << std::endl; } MyClass(const MyClass& obj) { std::cout << "Copy constructor" << std::endl; } }; int main() { MyClass obj1; // 调用默认构造函数 MyClass obj2(10); // 调用带一个参数的构造函数 MyClass obj3(10, 20); // 调用带两个参数的构造函数 MyClass obj4 = obj1; // 调用拷贝构造函数 return 0; } ``` 在上面的代码中,我们定义了一个名为 MyClass 的类,并同定义了默认构造函数、带参数的构造函数、拷贝构造函数,然后在主函数中创建了四个 MyClass 类的对象,并分别调用了不同的构造函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值