| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 688 人关注过本帖
标题: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;
}

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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:134
帖 子:1493
专家分:7546
注 册:2014-5-19
  得分:0 
这就是构造函数吧。哪里涉及到拷贝什么的了?HasPtr hp4(参数1,参数2)这样能不能过呢?
2017-07-17 14:05







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

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