下载此文档

C 构造函数详解及显式调用构造函数.doc


文档分类:通信/电子 | 页数:约15页 举报非法文档有奖
1/15
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/15 下载此文档
文档列表 文档介绍
C++构造函数详解及显式调用构造函数
D
this->m_imag = ;
// 把等号左边的对象再次传出
// 目的是为了支持连等 eg: a=b=c 系统首先运行 b=c
// 然后运行 a= ( b=c的返回值,这里应该是复制c值后的b对象)
return *this;
}
};
下面使用上面定义的类对象来说明各个构造函数的用法:
int main()
{
// 调用了无参构造函数,
Complex c1,c2;
// 调用一般构造函数,数据成员初值被赋为指定值
Complex c3(,);
// 也可以使用下面的形式
Complex c3 = Complex(,);
// 把c3的数据成员的值赋值给c1
// 由于c1已经事先被创建,故此处不会调用任何构造函数
// 只会调用 = 号运算符重载函数
c1 = c3;
// 调用类型转换构造函数
// 系统首先调用类型转换构造函数,,然后调用等号运算符重载,将该临时对象赋值给c1
c2 = ;
// 调用拷贝构造函数( 有下面两种调用方式)
Complex c5(c2);
Complex c4 = c2; // 注意和 = 运算符重载区分,这里等号左边的对象不是事先已经创建,故需要调用拷贝构造函数,参数为c2
//这一点特别重要,这儿是初始化,不是赋值。其实这儿就涉及了C++中的两种初始化的方式:复制初始化和赋值初始化。其中c5采用的是复制初始化,而c4采用的是赋值初始化,这两种方式都是要调用拷贝构造函数的。
区别:
初始化:被初始化的对象正在被创建
赋 值:被赋值的对象已经存在
}
三、思考与测验
1. 仔细观察复制构造函数
Complex(const Complex & c)
{
// 将对象c中的数据成员值复制过来
m_real = ;
m_img = ;
}
为什么函数中可以直接访问对象c的私有成员?
答:(网上)因为拷贝构造函数是放在本身这个类里的,而类中的函数可以访问这个类的对象的所有成员,当然包括私有成员了。
2. 挑战题,了解引用与传值的区别
Complex test1(const Complex& c)
{
return c;
}
Complex test2(const Complex c)
{
return c;
}
Complex test3()
{
static Complex c(,);
return c;
}
Complex& test4()
{
static Complex c(,);
return c;
}
void main()
{
Complex a,b;
// 下面函数执行过程中各会调用几次构造函数,调用的是什么构造函数?
test1(a);
test2(a);
b = test3();
b = test4();
test2();
// 下面这条语句会出错吗?
test1(); //test1( Complex( )) 呢?
}
答:
为了便于看构造函数的调用效果,我将类重新改一下,添加一些输出信息,代码如下:
View Code
下面是程序运行结果:
#include <iostream>
using namespace std;
class Complex
{
private :
double m_real;
double m_imag;
int id;
static int counter;
public:
// 无参数构造函数
Complex(void)
{
m_real = ;
m_imag = ;
id=(++counter);
cout<<"Complex(void):id="<<id<<endl;
}
// 一般构造函数(也称重载构造函数)
Complex(double real, double imag)
{
m_real = real;
m_imag = imag;
id=(++counter);
cout<<"Complex(double,double):id="<<id<<endl;
}
// 复制构造函数(也称为拷贝构造函数)
Complex(const Complex & c)
{
/

C 构造函数详解及显式调用构造函数 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数15
  • 收藏数0 收藏
  • 顶次数0
  • 上传人lu2yuwb
  • 文件大小4.55 MB
  • 时间2021-08-21