标签:
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)用构造函数确保初始化
对于一个空类
编译器会自动声明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()函数执行结束时释放的
如果类中没有定义析构函数,,那么系统将自动创建一个没有任何功能的默认析构函数;
标签:
原文地址:http://www.cnblogs.com/swjcs/p/4925771.html