Const :非const的全局变量在整个程序中都可以访问,加上const限定符呢?
答:使用修饰符 extern const 可以再全局访问。
什么是引用?
定义的类似于: int & ref=val;当引用捆绑于实际对象,对引用的操作即对实际对象的操作。
ref +=2即val+2;当引用初始化之后,只要该引用存在,它就保持绑定到初始化时指向的对象。
那什么是const 引用?
Const int &ref;可以读取但不能修改ref、对它赋值都是违法的,因此不能用它来改变它所引用的对象。同时,const int val=10;Const int &ref =val; 必须是const引用指向const类型对象,企图使用int&ref=val ,因为通过ref修改val会导致改变了const对象的值,所以这样是非法的。
一个老问题:const 的位置放在哪?
const char *p = greeting; // non-constpointer,
// const data
char * const p = greeting; // constpointer,
// non-const data
使用typedef的意义?
Typedef unsigned int uint32 ;隔离平台的数据类型不一致。
Strcut 与class 有何区别?
Strcut是默认的public 类型成员,class是默认的private类型。
class可以声明无参构造函数,可以声明析构函数;而struct只能声明带参数构造函数,且不能声明析构函数。
class支持继承,可以继承自类和接口;而struct没有继承性,struct不能从class继承。
class实例由垃圾回收机制来保证内存的回收处理;而struct变量使用完后立即自动解除内存分配。
性能上的考虑,我们应该考虑使用struct来代替class, struct变量占有堆栈的空间,因此只适用于数据量相对小的场合.
Vector是如何使用的?
std::vector<int> vec;
vecotor<int> ver2(vec);
vector<int>::size_type
vector<int> ver(10);//10 为元素的个数
一般使用方法,注意下面的使用差异。
const std::vector<int>::iterator iter= // iter acts like a T* const
vec.begin();
*iter = 10; // OK, changes what iter pointsto
++iter; // error! iter is const
std::vector<int>::const_iteratorcIter = // cIter acts like a const T*
vec.begin();
*cIter = 10; // error! *cIter is const
++cIter;
析构函数使用虚函数的原因?
析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。
const Rational operator*(constRational& lhs, const Rational& rhs);
很多第一次看到这些的程序员会不以为然。为什么 operator* 的结果应该是一个 const object(对象)?因为如果它不是,客户就可以犯下如此暴行:
Rational a, b, c;
...
(a *b) = c; // invoke operator= on the
//result of a*b!
顺便提一下,const objects(对象)在实际程序中最经常出现的是作为这样一个操作的结果:passedby pointer- or reference-to-const(以传指针或者引用给 const 的方式传递)。
void print(const TextBlock& ctb) // in this function, ctb isconst
{
std::cout<< ctb[0]; // calls const TextBlock::operator[]
...
}
virtual ~CPerson();
class CStudent:public CPerson
CPerson * poCPerson = new CStudent; //构造一个CStudent的动态对象
delete poCPerson; 通过基类的指针去销毁派生类的动态对象,没有virtual调用CPerson析构可以,但是调用CStudent析构则会失败。
virtual void close() = 0;纯虚函数,包含纯虚函数的类:抽象类
一个game 的实现:
基类:CSprite 成员包含x,y坐标,宽高,active 是否为活着,Create(int w, int h, BOOL active )时传入坐标。BitBlt( LPDIRECTDRAWSURFACE bmp ){ m_bmp = bmp; }贴图,Draw 画出来。HitTest
:bool hittest(CSprite &sprite) 是否相撞。CSprite作为角色的公共类,包括了基本的元素。
CBullet 子弹类继承于CSprite ,扩展的成员包括DIRECTION,speed速度等,扩展的成员函数Move。
CTank 类。
voidCreate( int w, int h, BOOL active )
{
CBullet::Create(w, h, active ); 子类调用父类的函数。
m_bore.Create(32, 32, TRUE );
}
class IInterface : public virtual RefBase
{
public:
IInterface();
sp<IBinder> asBinder();IBinder是远程对象的基本接口
sp<const IBinder> asBinder() const;
protected:
virtual ~IInterface();
virtual IBinder* onAsBinder() = 0;
};
asBinder是封装了onAsBinder的,而onAsBinder是纯虚函数,
RefBase 类作为基类起引用计数作用。
IBinder 主要作用函数:transact(),