-
1.析构函数唯一功能就是释放资源; 不允许加任何参数,也就不可能重载,这一点和构造函数不同! 2.几个特点: 如果没有自定义析构函数则系统自动生成; 析构函数在对象销毁时自动调用; 析构函数没有返回值、没有参数也不能重载;查看全部
-
对象的生命历程查看全部
-
1.拷贝构造函数(配图) 参数是与自己完全一样的数据类型的引用类型,也就是类的引用; 拷贝构造函数的参数是确定的,不能重载,在这一点上与构造函数不同! 2.特点: (1)如果没有自定义拷贝构造函数则系统自动生成一个默认的拷贝构造函数 (2)当采用直接初始化或复制初始化实例化对象时系统会自动调用拷贝构造函数。 3. Student stu1; Student stu2=stu1; Student stu3(stu1); 4.拷贝构造函数还用于类的参数传递,例 void test(Teacher t){} int main(){ Teacher t1; teat(t1);//此时也会调用一次拷贝构造函数 }查看全部
-
累的定义查看全部
-
1.默认构造函数:不需要用户传递参数的构造函数(无参构造函数和有默认参数的构造函数) 2.初始化列表:(配图) 推荐使用 3.初始化列表比构造函数更加高效,所以推荐使用初始化列表!! 更重要的用处是:例 class Circle { public: Circle(){m_dPi=3.14} private: const double m_dPi; }; 编译会报错,常量不能再赋值! class Circle { public: Circle():m_dPi(3.14){}; private: const double m_dPi; }; 此时,编译会正常! 4.初始化列表的特点: ①初始化列表优先于构造函数执行(先执行初始化列表,再构造函数) ②初始化列表只能用于构造函数(用于其它函数后会出错) ③初始化列表可以同时初始化多个数据成员查看全部
-
从堆中实例化对象 一定要将申请的内存释放掉查看全部
-
从栈中实例化对象查看全部
-
通过访问限定符进行封装查看全部
-
类的定义查看全部
-
对象初始化:(1)有且仅有一次的初始化(2)根据条件初始化 1.构造函数特点: ①构造函数在对象实例化的时候被自动调用且仅调用一次 ②构造函数与类同名 ③构造函数没有返回值(void都不用写) ④构造函数可以有多个重载形式 ⑤实例化对象时仅用到一个构造函数 ⑥当用户没有定义构造函数时,编译器会自动生成一个构造函数,这个构造函数不作任何事情 2.(1)有参构造函数(可以有默认参数值) 例:Teacher(string name,int age=15){//to do}; 注意:如果两个默认值都有了,那么就可能会和无参构造函数发生冲突,编译就会失败! (2)无参构造函数 例:Teacher(){//to do};查看全部
-
1.内存分区(配图) 栈区由操作系统管理;堆区需要程序员来操心(申请和释放)查看全部
-
1.在类内定义的函数,编译器会优先编译成内联函数,实在比较复杂的就作罢。 类内定义:函数声明和函数体都在类内。 2.同文件的类外定义: void Car::run(){//to do}; 3.分文件的类外定义(更加正规,有诸多好处,推荐使用): 先用一个Car.h的头文件包含类的成员函数和数据; 再在Car.cpp文件中写函数体: (.cpp和.h的文件名要相同)查看全部
-
面向对象编程: 以“谁做什么”来表达程序的逻辑,将所有数据的操作转化为成员函数的调用,换句话说,对象在程序中的所有行为都通过调用自己的函数来完成。 封装的好处: 能做到让数据只能读不能写(权限控制);防止非法的赋值。 1.建议访问限定符的public写在private前面,这样在访问类时可以节省时间。 2.“只读”权限:只能读不能写,在封装的时候只定义读取函数,不定义赋值(改值)函数。 3.建议定义私有成员时命名为 m_数据类型+成员名(首字母大写) m是member的意思 如:string m_strName 以便区分数据成员查看全部
-
int main() { student stu(); student *p=NULL; p=new student };查看全部
-
构造函数的规则和特点查看全部
举报
0/150
提交
取消