先来一段废话:
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++编程,里面含有一些个人的思想与学习总结,绝无抄袭之用,仅供学习。