好久没有写博客了….趁着正在学习c++把博客捡起来.
嗯….本次是关于构造函数和析构函数的笔记
引入:对对象在构建的时候对其进行初始化.
class Frist
{int a;
public://手动写一个初始化函数void init(int d=5)//这里用了缺省值,如果调用时写了(传入)该参数,则d的值为该参数,没写就默认为5.{a=d;}
};
int main()
{Frist one,two;one.init();//没有d默认为5two.init(2); //有d为2
}
这样自己定义有点小瞧c++了,在c++中有更好的方法来初始化对象.
class Frist
{int a;Frist()//构造函数,也可以在类外定义{a=0;}
};
int main()
{Frist one;//隐式Frist two=Frist();//显式//one.Frist;//构造函数是创建对象的,对象没构建就无法通过对象调用,构建好了就不需要在次调用,所以通过对象调用构造函数是错误的.
}
class Frist
{int a,b,c;Frist(){a=0;b=0;c=0;}Frist(int x){a=x;b=0;c=0;}
};
Frist::Frist(int x,int y,int z=0)//类外定义
{a=x;b=y;c=z;
}
int main()
{Frist a1;Frist a2(1);Frist a3(1,4,5);Frist a5(1,3);
}
{系统自己默认添加型如Frist(){}默认构造函数 {程序员自己添加的 {无参数 Frist(){....}{参数全为缺省值Frist(int a=0,int b=4){....}
4.调用默认构造函数时不能在后面加括号
Frist a1(1,2);//有参数的构建对象
Frist a1;//不写参数构建对象就不能加括号
Frist a1();//加了括号编译会通过,但是会认为这是在声明函数.(该函数返回值是Frist类,函数名为a1,参数为空),这种错误非常危险.
class Frist
{int a,a2;Frist(int b){a=b;}Frist(int b,int b2){a=b;a2=b2;}
};
int main()
{Frist one(0);one=100;//这里的赋值可以成功,并且这个值赋给了a;one={100,114};//将一组数据,通过构造函数,构造出一个临时对象,再将其赋值给one
}
这里的赋值是有一点隐式转化的意思,通过构造函数(传入对应参数)进行构造一个临时的对象,然后就把临时对象的内容赋值给一遍要赋值的对象.
所以在调试时你会发现他调用了一次构造函数,这里就像是使用构造函数进行了隐式转化.
有时候我们会看到构造函数前面加了关键字
explic Frist(int b)
{....}
这意思是显式转化,即当我们再使用上面的操作的时候就要显式的强制转化就可以了.
one=(Frist)100;
既然不同类型可以转换为对象,那能不能用对象转化为其他类型呢?
int a=one;//单纯的这样的一条语句是不对的,不可以的
那我们可以写一个函数,把对象中数据作为int型返回出来.
但是这在本质上和上面的类型转化不同,c++中有骚操作,可以用运算符重载.和构造函数没关系了,以后学了再说….
学习笔记,有错误或者用词不当的地方,欢迎大佬评论指出.
本文发布于:2024-02-01 22:26:07,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170679756639831.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |