4期c++9月21号

2017-09-21  本文已影响0人  刘博zero

一、上午教课的第一个重要知识点是抽象类,对于抽象类在课上已经完全掌握,一下是一些重要的点。

抽象类:带有纯虚函数的类称为抽象类

形式:class类名{virtual类型 函数名(参数表)=0;........}

因为我们生活中的抽象类是顶层的基类,所以抽象类只可以给基类来使用。而且不可以定义抽象类的对象,只能声明抽象类的指针。纯虚函数直到被覆盖前所派生的类均为抽象类。

抽象类的作用:把所用的派生类用一个抽象概念,组织在一个继承结构中,保证派生类中和基类相同动作行为。抽象类无法实现的函数,可以声明为纯虚函数,留给派生类去实现。

二、上午的拷贝构造函数接受的不是很多,因此下午我们要求助教老师给我们大白话式的讲了一遍,已经完全接收。

拷贝构造函数(这部分知识上课已经吸收)

对象的赋值:string name;一个已知对象student a(“abcd”)赋值给另一个已知对象。student b;  b=a;通过对赋值运算符的重载实现。

对象的拷贝:用一个已知对象student s1(“abcd”)构造或者初始化一个新对象。student s2=s1或者student s2(s1);

拷贝构造函数的形式student(student & s)对象的引用;或者student(const student & s);对象的常引用{常引用中的s不能成为左值}

下午助教老师跟我们重新讲解了关于深拷贝的问题。

目的是要给自己定义一个新的拷贝空间,避免浅拷贝同时指向同一个动态空间。

aa(){f=new char[10];}  aa(aa const & s){f=new  char[10];strcpy(f,s.f);}  ~aa(){delete [ ]f;}    char * f;};

int main(){①aa p;   strcpy(p.f,"Computer");cout<<p.f<<endl;   aa q(p);..

首先①把computer拷贝给p此时p会建立一个空间,执行aa q(p);会先执行拷贝函数,这时q会重新建立一个空间,此时p里的会拷贝到q里,在执行析构函数时,会先析构q空间释放,在析构p空间释放。

三、例题错误:如下循环为3,因此all shapes is 3,结果显示为4.

错误原因:在square调用了rectangle,square里面有count++,并且还会运行rectangle里面的count++,重复了一次。

改正方法:把count++写到基类里面。

上一篇下一篇

猜你喜欢

热点阅读