C++阶段小结(五)

2014-11-24 07:35:58 · 作者: · 浏览: 2
Base *p=&child;
p->show1();//Base
p->show2();//Child
Base &r=child;
r.show1();//Base
r.show2();//Child
return 0;
}
二十二、虚析构函数
(1)虚析构函数即:定义声明析构函数时在前面加virtual修饰,如果将基类的析构函数声明为虚析构函数时,由该基类所派生的所有派生类的析构析构函数也都是自动成为虚析构函数
(2)基类指针p指向用new动态创建的派生类对象child时,用“delete p”删除对象时分两种情况
第一、如果基类中的析构函数为虚析构函数,则会先删除派生类对象,再删除基类对象
第二、如果基类中的析构函数为非虚析构函数时,则会删除基类对象,不会删除派生类对象,这样会出现内存泄露的问题,这个很重要,所以一般把析构函数声明定义成虚析构函数。
二十三、纯虚函数
纯虚函数的定义:
(1)虚函数被“初始化”为0的函数。声明纯虚函数的一般形式是
virtual 函数类型 函数名(参数列表)=0;
(2)纯虚函数没有函数体,由函数体的话就没有意义了
(3)最后面的“=0”并不是表示函数的返回值为0,它只是起了形式上的作用,告诉编译系统“这是纯虚数函数”
(4)这是一个声明语句,最后必须加分号
(5)不能够在当前类中定义
二十四、抽象类
(1)包含有纯虚数函数的类都是抽象类。
(2)不能够用抽象类创建对象(这一点很重要),但是可以用抽象类派生出派生类。也可以用抽象类创建指针或引用来指向抽象类的派生类对象
(3)抽象类的派生类可以把抽象类中的成员变量和成员函数继承下来,包括纯虚函数也会被继承
(4)抽象类的派生类可以实现抽象类的纯虚函数。如果抽象类的派生类没有吧抽象类的纯虚函数实现,那么这个派生类也是抽象类。
(5)纯虚函数被派生类实现以后变成了虚函数
二十五、Protected或private修饰的构造函数
在类的外部创建对象时,不能够调用protected或private修饰的构造函数。
当子类中的构造函数调用父类的private修饰的构造函数时会出错,当子类中的构造函数调用父类中的public或protected修饰的构造函数时是对的
二十六、域名空间
域名空间就是在函数名前面加上自己的名字
例如:
namespace tt{
class Stu {
public:
void study();
};
}
namespace cc{
class Stu {
public:
void study();
};
namespace tt{
void Stu::study() {
cout << "Stu::study() tt \n";
}
}
namespace cc{
void Stu::study() {
cout<<"Stu::Study() cc \n";
}
}
cout和cin函数的域名就是std,所以在使用的时候需要先声明
using namespace std;如果不声明那么在使用cout和cin时需要在函数前面加上”std::”,同理在使用其他自定义的域名空间的时候也需要在使用前声明,或者在使用时加上域名双冒号。使用域名空间可以避免出现同名的函数时会出现歧义的情况,在大型项目时都会用到域名空间