派生类的对象访问基类中被派生类覆盖或隐藏了的函数或变量
2016-08-12 19:55
447 查看
隐藏基类成员函数的情况:如果在派生类中定义了一个与基类同名的函数,不管这个函数的参数列表是不是与基类
中的函数相同,则这个同名的函数就会把基类中的所有这个同名的函数的所有重载版本都隐藏了,这时并不是在派
生类中重载基类的同名成员函数,而是隐藏,比如类A中有函数f(int i,intj)和f(int i)两个版本,当在从A派生出的类
B中定义了基类的f()函数版本时,这时基类中的fun(int i)和f(int i,int j)就被隐藏了,也就是说由类B创建的对象比如
为m,不能直接访问类A中的f(int i)版本,即使用语句m.f(2)时会发生错误。
怎样使用派生类的对象访问基类中被派生类覆盖或隐藏了的函数或变量:
方法 1 使用作用域运算符::,在使用对象调用基类中的函数或变量时使用作用域运算符即语句 m.A::f(2),这
时就能访问基类中的函数或变量版本。注意,访问基类中被派生类覆盖了的成员变量只能用这种方法
方法 2 使用 using:该方法只适用于被隐藏或覆盖的基类函数,在派生类的类定义中使用语句 using 把基类的
名字包含进来,比如using A::f;就是将基类中的函数f()的所有重载版本包含进来,重载版本被包含到子类之
后,这些重载的函数版本就相当于是子类的一部分,这时就可以用派生类的对象直接调用被派生类隐藏了的
基类版本,比如 m.f(2),但是使用这种语句还是没法调用基类在派生类中被覆盖了的基类的函数,比如 m.f()
调用的是派生类中定义的函数f,要调用被覆盖的基类中的版本要使用语句m.A::f()才行。
在派生类的函数中调用基类中的成员变量和函数的方法:就是在函数中使用的被派生类覆盖的基类成员变量或函数
前用作域解析符加上基类的类名,即a::f()就是在派生类的函数中调用基类中被派生类覆盖了的函数f()的方法。
派生类以私有方式被继承时改变基类中的公有成员为公有的方法:
使用::作用域运算符,不提倡用这种方法,在派生类的 public 后面用作用域运算符把基类的 公有成员包函进
来,这样基类的成员就会成为派生类中的公有成员了,注意如果是函数的 话后面不能加括号 ,如A::f;如果
f是函数的话不能有括号
使用using语句,现在一般用这种方法,也是在派生类的public使用using把基类成员包函进来,如using A::f。
http://blog.csdn.net/vast_sea/article/details/8083850
隐藏基类成员函数的情况:如果在派生类中定义了一个与基类同名的函数,不管这个函数的参数列表是不是与基类
中的函数相同,则这个同名的函数就会把基类中的所有这个同名的函数的所有重载版本都隐藏了,这时并不是在派
生类中重载基类的同名成员函数,而是隐藏,比如类A中有函数f(int i,intj)和f(int i)两个版本,当在从A派生出的类
B中定义了基类的f()函数版本时,这时基类中的fun(int i)和f(int i,int j)就被隐藏了,也就是说由类B创建的对象比如
为m,不能直接访问类A中的f(int i)版本,即使用语句m.f(2)时会发生错误。
怎样使用派生类的对象访问基类中被派生类覆盖或隐藏了的函数或变量:
方法 1 使用作用域运算符::,在使用对象调用基类中的函数或变量时使用作用域运算符即语句 m.A::f(2),这
时就能访问基类中的函数或变量版本。注意,访问基类中被派生类覆盖了的成员变量只能用这种方法
方法 2 使用 using:该方法只适用于被隐藏或覆盖的基类函数,在派生类的类定义中使用语句 using 把基类的
名字包含进来,比如using A::f;就是将基类中的函数f()的所有重载版本包含进来,重载版本被包含到子类之
后,这些重载的函数版本就相当于是子类的一部分,这时就可以用派生类的对象直接调用被派生类隐藏了的
基类版本,比如 m.f(2),但是使用这种语句还是没法调用基类在派生类中被覆盖了的基类的函数,比如 m.f()
调用的是派生类中定义的函数f,要调用被覆盖的基类中的版本要使用语句m.A::f()才行。
在派生类的函数中调用基类中的成员变量和函数的方法:就是在函数中使用的被派生类覆盖的基类成员变量或函数
前用作域解析符加上基类的类名,即a::f()就是在派生类的函数中调用基类中被派生类覆盖了的函数f()的方法。
派生类以私有方式被继承时改变基类中的公有成员为公有的方法:
使用::作用域运算符,不提倡用这种方法,在派生类的 public 后面用作用域运算符把基类的 公有成员包函进
来,这样基类的成员就会成为派生类中的公有成员了,注意如果是函数的 话后面不能加括号 ,如A::f;如果
f是函数的话不能有括号
使用using语句,现在一般用这种方法,也是在派生类的public使用using把基类成员包函进来,如using A::f。
http://blog.csdn.net/vast_sea/article/details/8083850
相关文章推荐
- 派生类的对象访问基类中被派生类覆盖或隐藏了的函数或变量
- C++继承中覆盖和隐藏基类成员变量或成员函数
- C++继承中覆盖和隐藏基类成员变量或成员函数
- 关于派生类访问基类对象的保护变量的问题 --Coursera
- C++基类成员函数访问派生类对象的基类成员问题
- 定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数
- 多继承(非虚继承)派生类对象内存结构(基类有虚函数)
- 神奇的虚函数:用基类指针访问对象的protected成员函数
- 同一个类的不同对象,对象的成员函数可以互相访问各自对象的私有变量和私有成员函数
- 怎样访问被子类同名覆盖(overwrite)的基类函数?
- 按照名称访问变量、属性、对象或影片剪辑。eval 函数
- 关于C++中,基类 派生类的关系 重载 覆盖 面对对象开发的必须要理解的非常好
- C++在类的成员函数中,允许直接访问该类的成员对象的私有成员变量
- VC++6.0中定义一个类的对象后,用“.”访问其成员函数和成员变量时,其成员函数和成员变量没有自动弹出
- javascript 直接创建对象与间接创建对象 私有函数不能访问this变量 是否使用var声明变量几个问题探讨
- 【提问整理】protected继承,派生类对象如何访问基类成员?
- C++派生类对象访问基类的protected成员
- 指向派生类对象的基类指针与虚函数
- 使用派生类对象通过成员函数指针调用基类虚函数之不可能性的证明
- part4.(two)派生类成员函数和其它函数访问基类成员时的权限(访问控制表)