C++之缺省参数的构造函数、缺省的构造函数及缺省的析构函数

缺省参数的构造函数

一、对于带参数的构造函数,在定义对象时必须给构造函数传递参数,否则构造函数将不被执行。

        但是在实际应用中,有些构造函数的参数值通常是不变的,只有在特殊情况下才需要改变它的参数值,这时可以定义成带缺省参数的构造函数。

示例:

class Stu
{
    private:
    char *name,*stu_no;
    float score;
    public:
    Stu(char *name1,char *stu_no1,float score1);
    ~Stu();
    void modify(float score1);
    void show();
    void Show_One(int n);
};

Stu::Stu(char *name1="Mr.all",char *stu_no1="123456",float score1=100.0)
{
    name=new char[N];
    strcpy(name,name1);
    stu_no=new char[N];
    strcpy(stu_no,stu_no1);
    score=score1;
}

Stu a("Mr.zhang","1206655023",150);
Stu b("Mr.zhou","1206655022");
Stu c("Mr.wu");Stu d;


缺省的构造函数

一、编译系统自动生成的缺省的构造函数。

      在实际的应用中,一般都是需要构造函数的。 如果没有给类定义构造函数,则编译会自动生成一个缺省的构造函数。

      格式:  类名::缺省构造函数名()    {     }

示例:

//类 Date中没有自定义构造函数.
Date date1,date2;
//编译系统会自动生成下述的构造函数
Date::Date() { }

它的作用:只是为对象开辟一个存储空间,而不能给对象中的数据成员赋初始值。


Ps:

第一,对于没有定义构造函数的类,其公有数据成员可以用初始值表进行初始化。(常用于结构和数组的初始化)

示例:

#include<iostream>

using namespace std;

class A
{
    public:
    int a,b;
};

int main()
{
    A s={1,2};
    //这是的A类数据成员的公有的.所以类外是可以访问的.
    /*s.a=1;
    s.b=2;*/
    cout<<s.a<<' '<<s.b<<endl;
    return 0;
}

第二、与定义变量类似,在用缺省的构造函数创建对象是,如果创建的是全局对象或静态对象,则对象的所有数据成员初始化为0或者空,否则对象的数据成员值的随机的。

示例1:(公有数据成员)

#include<iostream>

using namespace std;

const int N=20;
class A
{
    public:
    char name[N];
    int no;
} a;
int main()
{
    cout<<a.name<<a.no<<endl;
    A b;
    cout<<b.name<<b.no<<endl;
    return 0;
}

示例2 :(私有数据成员)

#include<iostream>

using namespace std;

const int N=20;
class A
{
    private:
    char name[N];
    int no;
    public:
    void Get()
    {cout<<name<<no<<endl;}
} a;
int main()
{
    a.Get();
    A b;
    b.Get();
    return 0;
}


第三,只要一个类定义了一个构造函数(不一定的无参构造函数),系统将不在提供缺省的构造函数。


缺省的析构函数

一、每个类必须有一个析构函数。如果没有显式地为一个类定义析构函数。编译系统会自动生成一个缺省的析构函数。

        格式:类名::~析构函数名()  {    }

示例:

//类 Date没有显式的定义析构函数
Date::~Date()
{  }

二、对于大多数的类,缺省的析构函数就能满足要求。但是,如果在一个对象完成其操作之前需要做一些内部处理,则应该显式地定义析构函数。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值