下载此文档

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


文档分类:通信/电子 | 页数:约14页 举报非法文档有奖
1/14
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/14 下载此文档
文档列表 文档介绍
C++构造函数详解及显式调用构造函数
C++构造函数详解及显式调用构造函数
c++类的构造函数详解
一、 构造函数是干什么的
class Counter
{
public:
// 类Counter的构造函数
/(,);
// 也可以使用下面的形式
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_real = ;
m_imag = ;
id=(++counter);
cout<<"Complex(const Complex&):id="<<id<<" from id="<<<<endl;
}
// 类型转换构造函数,根据一个指定的类型的对象创立一个本类的对象
Complex(double r

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

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数14
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小果冻
  • 文件大小551 KB
  • 时间2022-02-10