构造函数
#include <iostream>
#include "类的定义.h"
//构造函数名字必须与类名一致,并且不能指定返回类型 --->初始化
class Cuboid {
public :
//1.
Cuboid() {//默认构造函数 :1.空参 2.带所有形参带默认参数
len=hei=wit=0;
};//内部构造函数,必须为public;
//2.
Cuboid(int l,int h,int d=0) : len(l),hei(h),wit(d) {};
int volume() {
return len*hei*wit;
};
//3.
Cuboid (int l=0,int h=0);//参数默认值只能先在类的内部定义,不能放在外面
private:
int len,hei,wit;
String str;
};
//外部构造函数
Cuboid :: Cuboid (int l,int h) {
len = l,hei = h;
}
int main() {
//Cuboid k; 1,3构成歧义
Cuboid m(1,3);
return 0;
}
/*
利用带默认参数的默认造函数 进行隐式转换 (把某个数据类型转换成类 类型)
一般将单形参构造函数设置为explicit,表明该函数为显式,不能进行隐式转换,可以避免错误。
class Cuboid 中:
Cuboid(const String &s) : str(s) {}; //引用+不可修改
main 中:
string s = "jfiasgjoag";
Cuboid k = Cuboid(s); //使用构造函数,某种意思上将s字符串类型,变为了一个对象
*/
/*
复制构造函数:
利用一个已知的构造函数,来初始化一个被创建的同类的对象
只复制,所以用const限定
不自定义的话,会自动生成合成复制构造函数 ,
即不定义也可以使用等号。
经常应用在函数形参 或者 返回值为 对象时
浅复制(指针指向同一块存储空间,为了复制时节省空间)但会出bug;
深复制 ,new一个新的
用 = ,即系统自动生成的复制都是浅复制
https://www.icourse163.org/learn/NWPU-494001?tid=1468259464#/learn/content?type=detail&id=1250100088&sm=1
*/