人们常说的面向对象的三个特征:封装,继承,多态;
说到类,肯定能想到class关键字和struct关键字的区别:其实就是默认属性的访问权限不同,struct定义时,默认为public,class定义时,默认为private;
那就首先说说类的封装吧:类的封装简单来说就是将属性和方法合成一个整体,并且可以设置访问权限(私有,公有,保护)
然后介绍访问权限:public:公有,修饰的成员属性或者方法可以在类的内部和外部调用
private:私有,修饰的成员属性或者方法只能在内部使用
protected:能在类内部和继承的类对象中使用;
说了这么多,终于要开始说类了,其实类有两个特殊的函数:构造函数和析构函数;
这两个函数呢,是一般情况下类实例为对象的时候,自动调用的,构造函数在对象建立时调用,析构函数在对象销毁时调用;
而这其中构造函数主要分为三种:无参数构造函数(不需要参数的构造函数),有参数构造函数(需要传入参数),复制构造函数(用其他对象来初始化生成一个新对象);
其中要说明一点就是
1)当类中没有定义任何一个构造函数时,c++编译器会提供默认无参构造函数和默认拷贝构造函数
2)当类中定义了拷贝构造函数时,c++编译器不会提供无参数构造函数
3) 当类中定义了任意的非拷贝构造函数(即:当类中提供了有参构造函数或无参构造函数),c++编译器不会提供默认无参构造函数
4 )默认拷贝构造函数成员变量简单赋值
总结:只要你写了构造函数,那么你必须用。
另外,拷贝构造函数这里要避免浅拷贝问题,也就是说,假如存在指针变量,当用一个对象去初始化另一个对象的时候,指针仅仅是值的拷贝,并没有重新分配内存,加入一个对象把该内存释放了,另一个指针再去访问就会引起程序崩溃.