c++函数部分

东南大学c++函数部分视频教程笔记


1,面向过程与与面向对象的区别
  面向对象:实现细节过程,主模块+若干的子模块(main()+子函数),自顶向下逐步求精,
             效率低,重用性差。
  面向对象:描述模仿时并处理现实问题。要求高度概括,分类,和抽象
             (1)抽象:数据抽象,行为抽象
            (2)封装:将抽象出的数据成员,代码成员相结合,将它们视为一个整体。例如,控件。
            (3)继承和派生;保持原有类特性基础上,增加新的功能。
             (4)多态性:同一名称,不同功能实现方式。

 
  函数:是逻辑上相关语句与数据的封装,

  类:是逻辑上相关函数与数据的封装,

class 类名称
{
    public :
        公有成员
    private:
        私有成员(如果紧跟类名称后,可以缺省)
    protected:
        保护型成员(子类可以访问父类的protected类型)
}
   对于函数可以在类的外面进行实现:(函数的所有内容(缺省,析构)都适用)
例:
class student{
   public :
      void setID(int id);
};
student::void setID(int id){
   ID=id;
}

  结构体中缺省存储属性为共有的
 
  类中缺省存储属性为私有的

2,构造函数

   构造函数:将对象初始化为一个特定状态
   语法:
class student{
  public:
    student(int id,int age){
     ID=id;
     AGE=age;
    }
  private:
     int ID;
     int AGE;
};
void main()
{
  student s(2012,20); //初始化
}
还可以进行重载构造。

  拷贝构造函数:使用一个对象去初始化一个在被建立的对象
  语法:
class student{
  public :
    student(student &s);
};
student::student(student &s){  /此时的形参为student类型
   ID=s.ID;
   AGE=s.AGE;
}
三种用法 1,构造,2,形参,3,返回时
编译器自己可以生产构造函数

3,析构函数
    完成删除对象前的清理工作, 对象的生存期结束后调用释放空间,编译器自动生成
语法:
class student
{
   public : ~student(){};
};
构造函数申请资源,析构函数释放资源。
4,类的组合
   实现更加抽象的类
   原则:不仅负责本类的基本类型成员数据赋初值,也要对对象成员初始化
构造语法:
     类名::类名(对象成员所需形参,本类成员形参):对象1(参数),对象2(参数)
例:
class  Distance
{
   private :
     point p1,p2;
     double dist;
     double price;
   public :
     Distance(point a,point b,double);
}
Distance::Distance(Point a,Point b,double p):p1(a),p2(b) //:后对对像成员初始化
{
  double x=...;
  double y=...;
  dist=(x,y);
  price=p;  //基本类型初始化
}

源码见本文末尾《A》
顺序:构造函数:先调用内嵌对象的构造函数,然后调用本类的构造函数,
       析构相反,
前向引用申明

class B;
class A{
   public:
     void fun(B b);
};
class B{
   public :
      void fun(A a);
};

5,类模板
  可以为类声明一种模式,使得类中的某些数据成员,参数,返回值能取任意值。
  template<模板参数表>
  类声明
  例:
template (class T)
class complex{
  private :T real;
           T image;
  public :T realcomplex();
};
template (class T)
T complex::realcomplex()  //类外定义函数,注意
{
   ...
}
   创建对象时
template (class T)
complex(double) s1,s2;

《A》
源码如下
#include iostream.h
#include math.h
class Point{
private :
 int x,y;
public :
 Point(int a,int b);
 ~Point();
 int getX(){return x;}
 int getY(){return y;}
 void print(){cout<<x<<"  "<<y<<endl;}
};
Point::Point(int a,int b){
  x=a;
  y=b;
}
Point::~Point(){
  cout<<"调用析构"<<endl;
}

class  Distance
{
private :
     Point p1,p2;
     double dist;
     double info;
public :
     Distance(Point a,Point b,double p);
  void print()
  {
       cout<<"p1: ";
    p1.print();
    cout<<"p2: ";
    p2.print();
    cout<<"dist: "<<dist<<"  info: "<<info<<endl;
  }
} ;
Distance::Distance(Point a,Point b,double p):p1(a),p2(b) // :后对对像成员初始化
{
  double x=p1.getX()-p2.getX();
  double y=p1.getY()-p2.getY();
  dist=sqrt(x*x+y*y);
  info=p;  //基本类型初始化
}
void main()
{
 Point p1(1,2);
 Point p2(2,3);
    Distance dis(p1,p2,1);
    dis.print();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值