面向对象基础知识

面向对象基础知识
1.引用和指针区别引用是别名指针是实体引用只能定义时被初始化一次不可变2.作用域::1)全局作用域 2类作用域 3命名空间作用域3.构造函数析构函数顺序1构造函数先父类再子类2析构函数先子类再父类4.重载构造函数1如果没有定义系统会有默认构造函数无参数2默认构造函数有两种无参数和有默认参数两种情况3如果重载了带参数的构造函数又没定义默认构造函数则对象初始化时必须带参数5.构造函数初始化列表与构造函数中的赋值的区别原因编译器总是确保所有成员对象在构造函数体执行之前初始化下面三种必须采用初始化列表方式1需要初始化的数据成员是对象的情况(这里包含了继承情况下通过显示调用父类的构造函数对父类数据成员进行初始化)2需要初始化const修饰的类成员或初始化引用成员数据3子类初始化父类的私有成员class Mytest :public Test {public:Mytest():Test(110){//Test(110); // 构造函数只能在初始化列表中被显示调用不能在构造函数内部被显示调用};}6.虚函数1构造函数不能为虚函数析构函数一般定义为虚函数否则继承类的调用可能存在内存泄漏7.继承1一般都采用public方式继承public方式父类成员在子类中保持原有访问级别但父类定义的private,子类是访问不了2使用final禁止继承C118.static成员函数1相当于类里面的全局函数先于对象存在所以static修饰的变量要在类外初始化。9.多态采用 vitural定义成员函数定义了基类指针但指针指向派生类对象如果是虚函数则指针调用是派生类的函数9.类里面的定义指针尽量不要在类里面定义指针否则存在浅拷贝问题需要改写复制构造函数才行10.运算符重载运算符重载和普通函数定义差不多唯一区别一个是函数名一个是operator符号(例如operator)11. 嵌套类内部类例如 vectorint::iterator iter; vectorint::iterator是类名表示 vectorint定义的内部类iterator内部类就像这个类的一个成员函数所以内部类有权访问外部类内容包括private内容。但是内部类就相当于在一个作用域内定义了一个类这个作用域内的其他变量是无权访问这个类的。class Out{public :void Fun (){nested object; // 这个函数不能通过object.b_ 1;}private:class nested{void Fun2(){Out object;object._a 1; // 这个函数可以编译过通过}int b_;}int a_;}12 关于iostream和iostream.h的区别iostream.h继承C语言的标准库文件未引入名字空间定义所以可直接使用用#include iostream时要用using namespace std13 模板成员函数不能放在单独的实现文件中最简单的方法是将所以模板信息放在一个头文件14. 虚函数派生的类该函数始终是虚函数不必加关键字virtual,但函数名参数返回值要都一样为了安全加overide15. std::cout cout是命令空间std下的一个全局对象 这个是这个cout对象的操作符重载C和JAVA对比1.C有头文件JAVA没有2.C 命令空间using; java import3.JAVA没有指针类是引用类型变量自动垃圾回收C有引用和指针4.Java中的普通函数默认为虚函数因此动态绑定的行为是默认的而C必须将方法声明为虚函数(virtual关键字)执行时才会进行动态绑定5.JAVA关键字public,privateprotecte为包访问权限而C是类相关的访问权限6.继承上C在继承中也带有访问权限支持多继承而JAVA没有只有extends单一继承7.java不支持操作符重载不支持作用域不支持函数有默认值8.C没有接口JAVA有接口https://blog.csdn.net/zhou_chenz/article/details/54898666https://blog.csdn.net/zhou_chenz/article/details/54976584https://blog.csdn.net/zhou_chenz/article/details/55003040https://blog.csdn.net/zhangerqing/article/details/8194653