标题:C++显式调用构造函数创建对象无法正确匹配构造函数?
只看楼主
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
 问题点数:0 回复次数:2 
C++显式调用构造函数创建对象无法正确匹配构造函数?
HasPtr hp4 = HasPtr(1,str);
一开始我忘记把拷贝构造函数第一个参数设置为const了,HasPtr(const HasPtr& hp)写成了HasPtr(HasPtr& hp)结果出错,
可我觉得这和初始化hp4是没有关系的啊,我想调用的构造函数是HasPtr( int i1,string &str )
程序代码:
#include <iostream>
#include <memory>

using namespace std;

class HasPtr{
public:
    HasPtr() = default;
    HasPtr( int i1,string &str ){
        i = i1;
        ps = &str;
    }
    HasPtr(const HasPtr& hp){
        i = hp.i;
        ps = new string( *hp.ps );
        cout<<"调用拷贝构造函数"<<endl;
    }
    HasPtr& operator=( HasPtr& hp){
        cout<<"调用拷贝赋值运算符"<<endl;
        i = hp.i;
        ps = hp.ps;
        return *this;
    }

    int i;
    string *ps;
};

int main(  ){
    string str = "hello";
    HasPtr hp4 = HasPtr(1,str);
    cout<<hp4.i<<" "<<hp4.ps<<endl;

    HasPtr hp1(1,str);
    cout<<"hp1建立完成"<<endl;
    HasPtr hp2 = hp1;
    HasPtr hp3;
    hp3 = hp1;

    HasPtr* hp5 = new HasPtr(1,str);
    return 0;
}

搜索更多相关主题的帖子: 调用 构造函数 str int string 
2017-07-16 15:04
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
得分:0 
HasPtr hp4 = HasPtr(1,str);这里是不是调用拷贝构造函数了?
因为拷贝构造函数第一个参数必须引用类型,但不并不需要是const引用类型啊。
还有如果调用了拷贝构造函数为什么没有输出“调用拷贝构造函数”
2017-07-16 15:21
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:0 
这就是构造函数吧。哪里涉及到拷贝什么的了?HasPtr hp4(参数1,参数2)这样能不能过呢?
2017-07-17 14:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-479414-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.150638 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved