c++基础知识学习:
http://blog.csdn.net/alvanchen/article/details/5744457
c++内存管理:
http://blog.csdn.net/zhanghefu/article/details/5003407
http://blog.csdn.net/lejuo/article/details/2269571
c++基础知识:
基本内置类型:bool,char,wchar_t,short,int,long,float,double,long double
指针:指针用于指向对象。与迭代器一样,指针提供对其所指对象的简介访问。指针用于访问单个对象,而迭代器只能用于访问容器内的元素。
每个指针都有一个与之相关联的数据类型,该数据类型决定了指针所指向的对象类型。例如,一个int型指针只能指向一个int对象。
指针三种取值:0值,表明它不指向任何对象;保存一个特定对象的地址;指向某个对象后面的另一个对象。指针使用前一定要初始化,如果必须分开定义指针和所指向的对象,则将指针初始化为0。
指针操作:
string s1("some value");
string *sp1 = &s1; //s2指向了s1的内存块
*sp1 = "new value"; //修改了sp1指向的内存中的值,s1中的数据也改变了
string *sp2 = "hello";
sp1 = sp2; //sp1重新指向了"hello"的内存
&符号是取地址操作符,用于一个对象上时,返回的是该对象的存储地址;
*符号是解引用操作符,对指针进行解引用操作,可以获得该指针所指对象的值。
c中的指针和数组容易产生不可预料的错误,现代C++程序采用vector类型和迭代器取代一般的数组、采用string类型取代c风格字符串。
指针和引用比较:
1、将一个指针赋值给另一个指针时,使其指向了另一个不同的对象,对原来指向的对象没有影响。
int ival = 1024;ival2 = 2048;
int *pi1 = &ival,*pi2 = &ival2;
pi1 = pi2; //ip1指向了ip2指向的对象即ival2,ival对象不受影响
2、将一个引用赋值给另一个引用时,两个引用还是分别指向原来的关联对象,对象的值会改变。
int ival = 1024;ival2 = 2048;
int &ri = ival,&ri2 = ival2; //相当于为引用起了一个别名
ri = ri2; //ri仍然指向ival对象,ri2指向ival2对象,只是ival对象的内容改变了,与ival2相等了。
注意,下面的写法与上面的不一样:
int a = 10;
int b = a; // b不是a的别名,而是指向另一块内存,把a的内容拷贝过去。
b = 20;//此时a的值仍为10;
virtual关键字参考文章:
http://developer.51cto.com/art/201104/256256.htm
C++ Virtual关键字
C++通过虚函数实现多态."无论发送消息的对象属于什么类,它们均发送具有同一形式的消息,对消息的处理方式可能随接手消息的对象而变"的处理方式被称为多态性。而虚函数是通过Virtual关键字来限定的。下面让我们一起来看。
Virtual是C++ OO(面向对象机制)机制中很重要的一个关键字。虚函数就是因为成员函数加了关键字virtual,可见它的重要性。
只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函数而不是Base的print函数。这是面向对象中的多态性的体现。(关于虚拟机制是如何实现的,参见Inside the C++ Object Model ,Addison Wesley 1996)
//---------------------------------------------------------
class Base
{
public:Base(){}
public:
virtual void print(){cout<<"Base";}
};
class Derived:public Base
{
public:Derived(){}
public:
void print(){cout<<"Derived";}
};
int main()
{
Base *point=new Derived();
point->print();
}
//---------------------------------------------------------
Output:
Derived