科创园

科创园地,分享技术知识,为科技助力发展,贡献一己之力。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C++中的特性

Posted on 2012-02-22 21:17  科创园  阅读(742)  评论(0编辑  收藏  举报

先来一段废话:

C++中提供了一套输入输出流类的对象,它们是cin 、cout和cerr,对应c语言中的三个文件指针stdin、stdout、stderr,分别指向终端输入、终端输出和标准出错输出(也从终端输出)。cin与>>一起完成输入操作,cout、cerr与<<一起完成输出与标准错误输出。利用cin和cout比C语言中的scanf和printf要方便得多,cin和cout可以自动判别输入输出数据类型而自动调整输入输出格式,不必像scanf和printf那样一个个由用户指定。使用cin,cout不仅方便,而且减少了出错的可能性。对于输出来说,我们像以上方式调用就可以了,对于输入来说,我们以如下方式调用即可:

int i;

cin>>i;

注意箭头的方向。在输出中我们还使用endl(end of line),表示换行,注意最后一个是字符‘l’,而不是数字1,endl相当于C语言的'\n',表示输出一个换行。 

切入重点:

结构体与c++中的类的主要区别:

 访问控制方面 public private

结构体默认是public

类默认为private

类和对象的实质区别: 

类和对象:类是抽象,对象是具体,对象有生命,类不占内存,对象才占据内存。

 

构造函数:

构造函数最重要的作用是创建对象本身 

C++规定每个类必须有一个构造函数(含默认,这个默认是不带参数的)

析构函数:

1、当一个对象生命周期结束时,其所占有的内存空间就要被回收,这个工作就由析构函数来完成。

2、析构函数是“反向”的构造函数,析构函数不允许有返回值,更重要的是析构函数不允许带参数,并且一个类中只能有一个析构函数。 

3、析构函数的作用正好与构造函数相反,对象超出其作用范围,对应的内存空间被系统收回或被程序用delete删除时,析构函数被调用。

4、根据析构函数的这种特点,我们可以在构造函数中初始化对象的某些成员变量,给其分配内存空间(堆内存),在析构函数中释放对象运行期间所申请的资源。 

函数重载:

   重载构成的条件:函数的参数类型、参数个数不同,才能构成函数的重载。 这里要区别于java或C#的不同

第一种情况:(1)void output();

                        (2)int output();

不能构成重载。

第二种情况:(1)void output(int a,int b=5);

  带有缺省值                 (2)void output(int a);

不能构成重载。

函数的覆盖:

函数的覆盖是发生在父类与子类之间的。

(重载是发生在一个类之间的,而覆盖则发生在两个类之间)

this指针:

1、this指针是一个隐含的指针,它是指向对象本身,代表了对象的地址(这里主要区别:

//重复的变量名进行显示 与隐式的区别

2、一个类所有的对象调用的成员函数都是同一代码段。this->。例如:x=0; 等价于 this->x=0。那么成员函数又是怎么识别属于同一对象的数据成员呢?原来,在对象调用pt.output(10,10)时,成员函数除了接受2个实参外,还接受到了一个对象s的地址。这个地址被一个隐含的形参this指针所获取,它等同于执行this=&pt。所有对数据成员的访问都隐含地被加上前缀

类的继承访问权限private public protected 可以看考面向对象的书籍。

下面贴出实例源码分析:

Code1:

#include <iostream.h>
class Point
{
public:
//private:
//protected:
int x;
int y;
Point()
{
x=0;
y=0;
}
~Point()
{
}
Point(int a,int b)
{
x=a;
y=b;
}
void output()
{
cout<<x<<endl<<y<<endl;
}
void output(int x,int y)
{
this->x=x;//重复的变量名进行显示 与隐式的区别
this->y=y;
}
};

void main()
{
Point pt(3,3);//实例化一个对象
// pt.x=5;
pt.output(5,5);
//pt.y=3;
//pt.init();
pt.output();
}

 

 

Code2:

#include <iostream.h>
class Animal
{
public:
Animal(int w,int h)
{
cout<<"Animal Construct"<<endl;
}
void eat()
{
cout<<"Animal Eat"<<endl;
}
protected://子类可访问
void sleep()
{
cout<<"Animal Sleep"<<endl;
}
private://私有只有自己内部可以访问
void breathe()
{
cout<<"Animal huxi"<<endl;
}

};

class Fish : public Animal
{
public:
Fish():Animal(20,44),a(1)
{
cout<<"Fish Construct"<<endl;
}
void breathe()
{
cout<<"Fish bubbul"<<endl;

}

private:
const int a;
};
void main()
{
Fish fh;
}

 这是C++学习的第二天,这里总结了C++的语言与其他如java面向对象的一些区别于自己独有的特点,这部分是面向对象的基本思想。下一篇本人将结合自己所学知识,分析C++编译运行原理与机制。

注明:本系列的学习知识参考孙鑫老师 的C++编程,里面含有一些个人的思想与学习总结,绝无抄袭之用,仅供学习。