在这个类层次结构中的c ++中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="16dp">
<EditText
android:id="@+id/etLogin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Login"
android:inputType="textPersonName" />
<EditText
android:id="@+id/etPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Hasło"
android:inputType="textPassword" />
<Button
android:id="@+id/bLogin"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Loguj"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/tvRegister"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Nie masz jeszcze konta? Kliknij tutaj."
android:layout_gravity="center_horizontal"/>
</LinearLayout>
在第三类中是否覆盖了n1虚函数,或者只是隐藏了n2实现?
在C#中我知道你可以在层次结构中的任何级别覆盖最低级别的虚拟方法。但我不知道它在C ++中是否相同。
class n1
{
public:
virtual void tt() { cout << "n1" << endl; }
};
class n2:public n1
{
public:
void tt() { cout << "n2" << endl; }
};
class n3:public n2
{
void tt() { cout << "n3" << endl; }
};
int main()
{
n1 *k = new n3;
k->tt();
}
答案 0 :(得分:4)
你压倒它。
如果你不确定你的覆盖是否正确,我们有一个名为Geeks For Geeks的关键字(需要c ++ 11),这可以确保你的覆盖符合虚函数/方法声明。
这应该清楚了:
#include <iostream>
using namespace std;
class n1
{
public:
virtual void tt() { cout << "n1" << endl; }
};
class n2:public n1
{
public:
void tt() override { cout << "n2" << endl; }
};
class n3:public n2
{
void tt() override { cout << "n3" << endl; }
};
int main()
{
n1 *a = new n1;
n1 *b = new n2;
n1 *c = new n3;
a->tt();
b->tt();
c->tt();
delete a;
delete b;
delete c;
}
输出:
N1
N2
N3
所以在3级层次结构中A-> B-> C如果A有虚方法而B实现它,它并不意味着从B派生的类将采用该方法
如果你覆盖它,那么将使用该覆盖。
class n1
{
public:
virtual void tt() { cout << "n1" << endl; }
};
class n2:public n1
{
public:
void tt() override { cout << "n2" << endl; }
};
class n3:public n2
{
};
输出:
N1
N2
N2