继承
一、定义
二、语法形式
注:
三、派生类
重名成员
例:
class base
{ public :
int a , b ;
} ;
class derived : public base
{ public :
int b , c ;
} ;
void f ()
{ derived d ;
d . a = 1 ;
d . base :: b = 2 ;
d . b = 3 ;
d . c = 4 ;
};
访问静态成员
派生类构造函数和析构函数的定义规则
派生类构造函数定义
派生类析构函数
四、多继承
多继承构造函数
五、虚基类
例:
class B { public : int b ;} ;
class B1 : virtual public B { private : int b1 ; } ;
class B2 : virtual public B { private : int b2 ; } ;
class C : public B1 , public B2 { private : float d ; } ;
六、赋值兼容规则![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519225245732.png)
应用:
特点:
多态
一、定义
二、实现
多态从实现的角度来讲可以划分为两类:编译时的多态和运行时的多态。
编译时的多态是通过静态联编来实现的,静态联编就是在编译阶段完成的联编。编译时多态性主要是通过函数重载和运算符重载实现的。
运行时的多态是用动态联编实现的。动态联编是运行阶段完成的联编。运行时多态性主要是通过虚函数来实现的。
三、静态联编
普通成员函数重载:
三种编译方式:
类指针关系
注:
四、虚函数
实现动态联编的前提
虚函数和动态联编
注:
虚函数重载特性
说明:
五、纯虚函数和抽象类
例1:
class point { /*……*/ } ;
class shape ; // 抽象类
{ point center ;
……
public :
point where ( ) { return center ; }
void move ( point p ) {center = p ; draw ( ) ; }
virtual void rotate ( int ) = 0 ; // 纯虚函数
virtual void draw ( ) = 0 ; // 纯虚函数
} ;
…...
shape x ; // error,抽象类不能建立对象
shape *p ; // ok,可以声明抽象类的指针
shape f ( ) ; // error, 抽象类不能作为函数返回类型
void g ( shape ) ; // error, 抽象类不能作为传值参数类型
shape & h ( shape &) ; // ok,可以声明抽象类的引用
例2:
class figure
{
protected :
double x,y;
public:
void set_dim(double i, double j=0) { x = i ; y = j ; }
virtual void show_area() = 0 ;
};
class triangle : public figure
{ public :
void show_area()
{ cout<<"Triangle with high "<<x<<" and base "<<y <<" has an area of "<<x*0.5*y<<"\n"; }
};
class square : public figure
{ public:
void show_area()
{ cout<<"Square with dimension "<<x<<"*"<<y <<" has an area of "<<x*y<<"\n"; }
};
class circle : public figure
{ public:
void show_area()
{ cout<<"Circle with radius "<<x;
cout<<" has an area of "<<3.14*x*x<<"\n";}
};
虚函数与多态应用
心得感受
随着学的东西越来越多哦还有难度越来越大,很多地方感觉掌握的都也不是特别好,比如向量和重载运载符和文件读写这一块。
快到期末了,很多课都要开始复习了,还有很多作业和笔记要补。但是却没什么动力,上课的状态也不是特别好,还是要多注意,多调整自己,把心思多放在学习上面。
自己的编程能力其实算是比较弱的,平时作业花费的时间也比较长,所以比较担心课程设计,还有最后的期末考试。感觉自己还是得多加强这些方面,多学多练。