东南大学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();
}