构造函数(二)

利用构造函数创建对象有以下两种方法:
(1) 利用构造函数直接创建对象.其一般形式为:
类名 对象名[(实参表)];
这里的“类名”与构造函数名相同,“实参表”是为构造函数
提供的实际参数。
(2) 利用构造函数创建对象时,通过指针和new运算符动态建立
对象,用 delete运算符撤销对象。其一般语法形式为:
*类名 指针变量 = new 类名[(实参表)];
new 运算符动态分配内存后,返回指向新对象的指针,需要定
义一个指向该类对象的指针变量存放新对象指针,以便对其
访问。
例:Date *d1=new Date(1988,2,3); //创建对象(*date1)
d1->setDate(2020,2,28);
Box *pt;
pt=new Box;
pt=new Box(12,13,14);//调用构造函数
delete pt;
构造函数初始化成员的两种方法:
1 使用构造函数的函数体进行初始化

    class Date
{
int d, m, y;
public:
Date(int dd, int mm, int yy)
{
d=dd;
m=mm;
y=yy;
}
Date(int dd, int mm)
{
d=dd;
m=mm;
}
}

2 使用构造函数的初始化列表进行初始化
格式:
funname(参数列表):初始化列表
{函数体,可以是空函数体}

其中,初始化列表的形式:
成员名1(形参名1),成员名2(形参名2),成员名你(形参名n)
例: class Date
{private:
int d, m, y;
public:
Date(int dd, int mm, int yy) :d(dd),m(mm),y(yy)
{ }
Date(int dd, int mm) : d(dd),m(mm)
{ }
};
必须使用参数初始化列表队成员函数进行初始化的情况:
1)数据成员为常量
2) 数据成员为引用类型
3)数据成员为没有无参构造函数的类的对象

#include <iostream>
using namespace std;
class A{
public:
A(int i):x(i),rx(x),pi(3.14) { }
void display()
{cout<<"x="<<x<<"rx="<<rx<<"pi="<<pi<<endl;}
private:
int x,&rx;
const float pi;
};
int main(){
A aa(10);
aa.display();
return 0;
}  
#include<iostream>
using namespace std ;
class A //没有无参构造函数的类
{ public :
A ( int x ) : a ( x ) { }
int a ;
} ;
class B
{ public :
B( int x, int y ) : aa( x ), b( y ) { }
void out()
{ cout << "aa = " << aa.a << endl << "b = " << b << endl ; }
private :
int b ;
A aa ; //数据成员aa为没有无参构造函数的类A的对象
} ;
int main ()
{ B objB ( 3, 5 ) ;
objB . out ( ) ;
}

类成员的初始化的顺序:
按照数据成员在类中的声明顺序进行初始化,与初始化成员列表中出现的顺序无关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泉水丁冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值