C++继承基类与子类中的同名变量与同名函数

来源:互联网 发布:php trim 不起作用 编辑:程序博客网 时间:2024/05/02 01:43

           在C++中,允许基类和子类中含有同名的成员变量或成员函数(包括虚函数和非虚函数),因此在使用时,将会有判断当前作用域有效变量名的问题。

        一、基类作用域

        在基类作用域(即基类成员函数域)中,所有使用的同名变量和同名函数均为基类中定义的同名成员,而与子类中的同名成员无任何关系。但有一种情况例外,即虚函数。当在基类成员函数中调用虚函数时,不一定必然调用基类中的虚函数,而是根据当前对象的类型决定调用哪个虚函数。

        二、派生类作用域

       在派生类作用域(即派生类成员函数域)中,默认所使用的同名变量与同名函数为派生类中定义的同名成员,但是可以通过在同名成员之前选择作用域的方法,调用基类的同名成员,例如:

class CBase {    string id;    string name;public:    CBase(string s1, string s2) : name(s1), id("base-"+s2) { }    void show() {        cout << "name: " << name << endl;        cout << "id: " << id << endl;    }};class CDerive : public CBase {    string id;    int age;public:    CDerive(string s1, int a, string s2) : age(a), id("DERIVE-"+s2), CBase(s1, s2) { }    void show() {        cout << "id: " << id << endl;        cout << "Base_id: " << CBase::id << endl;        cout << "age: " << age << endl;        //派生类的内部调用基类的方法        CBase::show();    }};


        就可以在CDerive类成员函数中,通过CBase::show()或者CBase::id的方式来调用基类的同名成员函数和成员变量。对于多重继承,这种方式仍然有效。

参考文章:http://www.quanxue.cn/JC_CLanguage/Cpp/Cpp09.html

原创粉丝点击