c++基础知识

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  

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值