码迷,mamicode.com
首页 > 编程语言 > 详细

C++学习

时间:2015-10-31 17:01:28      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

C++和C的区别大概就在于类的设计啦。。类的学习是C++的难点也是重点。

类的定义:

class  类名                  //为了对类进行访问限制,设置了三中访问控制权限;

{                              //默认为privata 

  数据成员;

  成员函数;

}

疑问一:定义了类,那么他在内存中是怎么样的呢?

只有在声明对象时才给数据成员分配了内存;

配注:

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

  栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

  堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

  自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

  全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

  常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。

感兴趣的可以看看http://www.cnblogs.com/lancidie/archive/2011/08/05/2128318.html

        http://www.cnblogs.com/ComputerG/archive/2012/02/01/2334898.html

2:private和protected 

private:只有该类的成员函数和友员函数可以访问;

protected:由该类的成员函数和友员函数以及派生类可以访问;

浅谈构造与析构函数

构造函数是为了给类对象的数据成员赋初值的;

析构函数是为了给已生存的内存空间进行释放等后处理工作

1、关于构造函数//资料来源网上   http://blog.csdn.net/coder_xia/article/details/7447822

1)用构造函数确保初始化

对于一个空类

  1. class Empty { };  

编译器会自动声明4个默认函数:构造函数,拷贝构造函数,赋值函数,析构函数(当然,如果不想使用自动生成的函数,就应该明确拒绝),这些生成的函数都是public且inline。构造函数对数据成员进行初始化,使用未初始化值可能导致无法预知的错误,所以,确保每一个构造函数都将每一个成员初始化。

 

2)为什么构造函数不能有返回值

如果有返回值,要么编译器必须知道怎么处理返回值,要么就客户程序员显式调用构造函数和析构函数,这样,还有安全性么?

3)为什么构造函数不能为虚函数

简单来说,虚函数调用的机制,是知道接口而不知道其准确对象类型的函数,但是创建一个对象,必须知道对象的准确类型;当一个构造函数被调用时,它做的首要事情之一就是初始化它的VPTR来指向VTABLE。

4)构造函数定义和全局函数定义的区别;

构造函数的外部声明与全局函数不同,需要添加类名和::

构造函数可以改变类成员函数的值;而全局函数不可以改变变量的值;

构造函数没有返回值,而全局函数可以有;

析构函数

http://www.cnblogs.com/cooperstuff/archive/2012/09/27/2706206.html

http://www.cnblogs.com/children/archive/2012/08/13/2636956.html

我要讲的大概就是释放析构函数的时间。。。

void sub()

{

  cmystring ss1="abcde";

  ss1.disp();

}

void main()

{

  subfunc();

  cmystring ss2("12345");

  ss2.disp();

}

ss1的释放是在sub函数结束后就被释放掉的;

ss2的释放一般是在main()函数执行结束时释放的

如果类中没有定义析构函数,,那么系统将自动创建一个没有任何功能的默认析构函数;

  

 

C++学习

标签:

原文地址:http://www.cnblogs.com/swjcs/p/4925771.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!