C++面向对象感悟整理
const
表示常量,相当于java中的final关键字,用于方法的修饰符表示在方法范围的不改变的量:
如
1 void getName()const; // 表示该方法不改变类的成员变量 2 void setName(const string name); // 表示在该方法体重name这个变量不发生值的改变
静态成员与变量
静态的成员可以在全局中进行必须的初始化,并且类的所有对象都共享该值,并且可以但通过类名来访问 如
1 全局区 2 int CUser::m_iCount = 10; // m_iCount为CUser类的静态变量 3 4 方法区 5 CUser mUser,mUser2; 6 nUser2.m_iCount = 15; 7 // 三者输出结果都为15 , 覆盖全局中的10 8 cout<<CUser.m_iCount; 9 cout<<mUser.m_iCount; 10 cout<<mUser2.m_iCount;
虚方法:
1 CUser mUser = new CEUser(); // CEUser为CUser的子类且拥有与父类完全相同的Login()方法 2 mUser.Login(); // 将调用父类CUser的方法,因为定义的mUser类型为CUser,只是调用了子类的构造方法(静态绑定原则)
为了实现访问子类CEUser中的Login()多态函数,采用动态绑定技术
virtual关键字定义虚方法,定义在父类中则子类默认同名同返回值的方法也为虚方法,实现类似Java中的覆盖功能,若方法名字相同参数列表相同而返回值不同,子类中的方法将发生编译错误
因为子类中定义了新的变量,分配了比父类更多的空间,所以父类的析构函数一般都是虚方法,内存释放时将先调用子类的析构函数再调用父类的析构函数
虚继承:
多继承的几个父类包含了相同的祖父类时,父类最好都是虚继承,这样子类就只有一个祖父类
1 class CBird:virtual public CAnimal 2 ... 3 class CFish:virtual public CAnimal 4 ... 5 class CFishbird:public CBird,public CFish 6 ...
C++中new关键字
比如说我有一个类Test.
我可以用 Test t 或者 Test *t = new Test();
1, 二种方法得到一个类实例,这二种方法有什么区别呢?
2, 我知道new 是动态内存分配!而不加new呢?就是静态分配了吗?
3, 另外,大家在平时用的时候都习惯用哪种方法呀?从性能和内存占用方面考虑哪种方法更好用一些呢?
4, 我记得好像听谁说过,不用NEW声明,对象实例是分配在栈中的!(难道一个类也要分配在栈中吗?)
5, 我用new关键字分配的对象,我不用delete删除它,编译器会自动帮我删除吗?而不会用NEW创建的呢?
答:

浙公网安备 33010602011771号