| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 386 人关注过本帖
标题:什么时候在创立对象时后边必须要加初始化?
只看楼主 加入收藏
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
结帖率:56.6%
  已结贴   问题点数:4  回复次数:5   
什么时候在创立对象时后边必须要加初始化?
自己写了一个简单的插入排序:

#include<iostream>
using namespace std;

class Cha
{
    public:
        Cha();  //如果我不写这个默认构造函数,那么main函数中Cha obj; 就没有问题;可是我一写上这句,就在 main函数中Cha obj; 这句出错。但是 写为Cha obj(5);就没问题了,这是为什么?为什么一定要加一个初始赋值?
        Cha(int a=5);
        
        void chasort();
        ~Cha();
        void Show();
    private:
        int *p;
        int n;
};

Cha::Cha()
{
   
}

Cha::Cha(int a)
{
    cout<<"输入数据元素个数n=";
    cin>>a;
    n=a;
    p=new int [n];
    cout<<"依次输入数据内容:";
    for(int i=0;i<n;i++) //初始化了一组数据
        cin>>p[i];
}

void Cha::chasort()
{
    int i,j,t,temp;
    for(i=1;i<n;i++)
    {
        for(j=0;j<=i-1;j++)
        {
            t=p[i];
            temp=i;
            if(p[i]<p[j])
            {
                while(i>=j+1)
                {
                    p[i]=p[i-1];
                    i--;
                }
                i=temp;
                p[j]=t;
            }

        }
    }
}

Cha::~Cha()
{
    delete[]p;
    cout<<"释放该组数据"<<endl;
}

void Cha::Show()
{
    for(int i=0;i<n;i++)
        cout<<p[i]<<" ";
    cout<<endl;
}

int main()
{
    Cha obj;   //这句总是出错
    obj.chasort();
    obj.Show();
    return 0;
}
2018-04-16 21:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:273
帖 子:6001
专家分:34312
注 册:2011-1-18
  得分:4 
对于 Cha obj; 这句,编译期猜不出你是想调用无参数的那个构造函数,还是缺省参数为5的那个函数
2018-04-17 00:13
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
  得分:0 
回复 2楼 rjsp
我写了Cha obj; 无参,难道计算机不认为我是调用无参的构造函数吗?就算是调用了默认构造函数在之后计算不出结果,也应该走无参构造函数吧?
2018-04-17 08:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:273
帖 子:6001
专家分:34312
注 册:2011-1-18
  得分:0 
回复 3楼 troyzyc
为什么?
Cha(int a=5); 的意思就是 用户不给参数的情况下自动给一个参数5 ,也就是 Cha obj; 等同于 Cha obj(5);
2018-04-17 08:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:273
帖 子:6001
专家分:34312
注 册:2011-1-18
  得分:0 
换句话说,假如 Cha obj; 应该调用无参构造函数的话,那么 Cha(int a=5); 中这个缺省函数什么时候起作用?
2018-04-17 08:22
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
  得分:0 
回复 5楼 rjsp
明白了,多谢大神屡次指教,顿悟的感觉!!!
2018-04-17 08:31







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

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