数据结构(data stucture)的定义:数据结构由数据元素的集合和该集合中数据元素之间的关系组成。

即{D,R}。

线性结构,即线性表(linearlist).  ---数组(array),文件,栈(stack),队列(queue),优先级队列

非线性结构  ---集合,图

C++类默认访问级别是private

struct默认访问级别是 public 这可以说是他们的惟一区别。

union默认访问级别也是 public

流是个简单的字符序列

cout<<endl; 输出一个换行符,并清空流。

C++的输入输出:

void main()
{

ifstream inFile;         //inFile为输入流对象
ofstream outFile;     //outFile为输出流对象
outFile.open("my.dat",ios::out); //建立输出的目标位置,文件my.dat

char c_date[]="i love you,yanting";
int number;
outFile<<c_data<<endl;   //输出到my.dat;
outFile<<number<<endl;
inFile.open("my.dat",ios::in|ios::nocreate);
if(!inFile)
{
    cerr<<"不能打开my.dat"<endl;
   exit(1);

}
inFile>>number;

}

// 解释: 
open函数参数有两个,一个是文件名,另一个是数据流动方向,
其模式有:
ios::out
ios::in
ios::app  //追加到文件末尾 
ios::binary
ios::nocreate   //文件不存在则打开失败 !

C++函数都有返回,用return表示返回一个与返回类型相同的值并终止函数的执行。

C++参数传递:

c++函数参数传递默认是采用传值,即copy一个副本,并不改变实参的值。

若需要传引用,则需要加上&,如 love(int &)。  引用传递的是实参的地址,所做改变都是对实参的改变。

如果参数是一个非常巨大的对象时,采用传引用将会节省非常多的传值时间,并且省去了副本占用的空间。

另外,当函数的返回值多于一个时,其中一个可由return返回,其他可使用引用型参数返回呢。

注意了:

传值的时候,参数可以是常量,常数,变量,表达式。

传引用时,只能是变量或者对象。

数组的传递非常特殊,传的是数组第一个元素的位置,也就是引用传递。 函数内部所做的改变将引起数组的变化,这一点必须牢记!

int addall(int a[],int n)
{
if(n>0) return a[n-1]+sum(a,n-1);
else return 0;    
}

如果传递的参数是一个对象A,那么函数中会创建A的一个副本,创建时自然会调用A的复制构造函数,在函数结束的时候会调用副本的析构函数撤销这个副本。

此时若没有自定义的复制构造函数,将调用编译器自动产生的复制构造函数。 原对象A的构造函数中不可以使用指针动态创建内存空间,因为自动产生的复制构造函数只

进行简单的指针复制,不分配空间。 或者你自己定义复制构造函数。

C语言中动态分配空间使用函数malloc  通过free释放这个空间

c++则用new 和delete取代了malloc and free.

int *p=new int;  指针会根据类型自动强制转换。

delete p;

int *p=new a[100];

delete []a;

C++的继承性:

class shape{
public:
       shape(point);
       void move(point);
       vitual double area()=0;
       vitual void draw()=0;
private:
        int count;
      
};

class traingle:public shape{      
  public:
    traingle(point,point,point);
    void draw();
    double area();
private:
    int details;
}                              
 // 注意,继承不到父类的private属性。

c++的多态性:

c++支持两种多态性: 

  编译时多态性:函数名的重载,操作符的重载。   //编辑器通过参数的个数,顺序,类型不同而把他们变成名字不同的函数。

  运行时多态性:通过派生类和虚函数实现。        //运行时通过虚函数列表来寻址函数地址,从而定位不同对象的函数。

操作符重载:

Point operator+(const Point&p);

Point operator*(int i);

int operator<(const Point& p);

输入输出符重载:

istream& operator>>(istream$ is,object& o) //重载输入运算

{

is>>o.id>>o.name>>o.sex;

return is;

}
ostream& operator<<(ostream$ os,object& o) //重载输出运算

{

os<<o.id<<o.name<<o.sex;

return os;

}

这样子,输入

cin>>o1;

cout<<o1;  将会以之前重载的方式输入输出。 

C++的虚函数:


虚函数通过在基类中使用vitual修饰函数而产生,有两种情况:

1. vitual void draw(){

   your code;

}

2. vitual void draw()=0;   //不提供实现,需要在子类实现。  这样的虚函数称为纯虚函数(pure vitual function),如果一个类有至少一个纯虚函数,那么这个类就是抽象类(abstract class)。

抽象类不可以生成实例,只能被继承。