C++;继承,子类中未替换函数 我在C++中有继承问题。附加的代码生成输出“1,1”,但我认为类b和c中的操作方法取代了类a中的操作方法。所以我期望输出“2,3,”。我必须更改什么才能获得输出“2,3,” #包括 //甲级 甲级 { 公众: a(); int action(); }; a::a() { } inta::action() { 返回1; } //b类 b类:公共a { 公众: b(); int action(); }; b::b() { } intb::action() { 返回2; } //c类 c类:公共a类 { 公众: c(); int action(); }; c::c() { } intc::action() { 返回3; } //主程序 int main() { a arr[2]; arr[0]=b(); arr[1]=c(); for(int i=0;i
操作需要在基类中是虚拟的,否则不能重写它 您可以使用C++;继承,子类中未替换函数 我在C++中有继承问题。附加的代码生成输出“1,1”,但我认为类b和c中的操作方法取代了类a中的操作方法。所以我期望输出“2,3,”。我必须更改什么才能获得输出“2,3,” #包括 //甲级 甲级 { 公众: a(); int action(); }; a::a() { } inta::action() { 返回1; } //b类 b类:公共a { 公众: b(); int action(); }; b::b() { } intb::action() { 返回2; } //c类 c类:公共a类 { 公众: c(); int action(); }; c::c() { } intc::action() { 返回3; } //主程序 int main() { a arr[2]; arr[0]=b(); arr[1]=c(); for(int i=0;i,c++,inheritance,C++,Inheritance,操作需要在基类中是虚拟的,否则不能重写它 您可以使用foo()override表示法进行编译时检查,以确定您是否真的在重写某些内容 你必须通过一个指向基类型的指针来访问派生类型,否则你会切片并做其他讨厌的事情。有时候,让析构函数虚拟化也是个好主意 class Base { }; class Derived : public Base { }; some_container<Base*> baseOrDerived; 类基{}; 派生类:公共基{}; 一些基于容器的订单; 然
foo()override
表示法进行编译时检查,以确定您是否真的在重写某些内容
你必须通过一个指向基类型的指针来访问派生类型,否则你会切片并做其他讨厌的事情。有时候,让析构函数虚拟化也是个好主意
class Base { };
class Derived : public Base { };
some_container<Base*> baseOrDerived;
类基{};
派生类:公共基{};
一些基于容器的订单;
然后,您可以将基本对象和派生对象分配到此容器中。例如,使用
new
,尽管您可能希望使用std::shared\u ptr或std::unique\u ptr
,而不是Base*
操作需要在基类中是虚拟的,否则无法重写它
您可以使用foo()override
表示法进行编译时检查,以确定您是否真的在重写某些内容
你必须通过一个指向基类型的指针来访问派生类型,否则你会切片并做其他讨厌的事情。有时候,让析构函数虚拟化也是个好主意
class Base { };
class Derived : public Base { };
some_container<Base*> baseOrDerived;
类基{};
派生类:公共基{};
一些基于容器的订单;
然后,您可以将基本对象和派生对象分配到此容器中。例如,使用
new
,尽管您可能希望使用std::shared\u ptr或std::unique\u ptr
,而不是Base*
操作需要在基类中是虚拟的,否则无法重写它
您可以使用foo()override
表示法进行编译时检查,以确定您是否真的在重写某些内容
你必须通过一个指向基类型的指针来访问派生类型,否则你会切片并做其他讨厌的事情。有时候,让析构函数虚拟化也是个好主意
class Base { };
class Derived : public Base { };
some_container<Base*> baseOrDerived;
类基{};
派生类:公共基{};
一些基于容器的订单;
然后,您可以将基本对象和派生对象分配到此容器中。例如,使用
new
,尽管您可能希望使用std::shared\u ptr或std::unique\u ptr
,而不是Base*
操作需要在基类中是虚拟的,否则无法重写它
您可以使用foo()override
表示法进行编译时检查,以确定您是否真的在重写某些内容
你必须通过一个指向基类型的指针来访问派生类型,否则你会切片并做其他讨厌的事情。有时候,让析构函数虚拟化也是个好主意
class Base { };
class Derived : public Base { };
some_container<Base*> baseOrDerived;
类基{};
派生类:公共基{};
一些基于容器的订单;
然后,您可以将基本对象和派生对象分配到此容器中。例如,使用
new
,尽管您可能希望使用std::shared\u ptr或std::unique\u ptr
而不是Base*
,但您可以使用虚拟函数获取输出“2,3”:首先,您应该
将类a中的void action();
更改为虚拟void action();
;其次,应该使用指针实现多态性;
第三,您应该将
arr[0]
更改为arr[i]
这是我的密码:
#include <iostream>
//Class a
class a
{
public:
a();
virtual int action();
};
a::a()
{
}
int a::action()
{
return 1;
}
//Class b
class b : public a
{
public:
b();
int action();
};
b::b()
{
}
int b::action()
{
return 2;
}
//Class c
class c : public a
{
public:
c();
int action();
};
c::c()
{
}
int c::action()
{
return 3;
}
int main(int argc, char *argv[])
{
a *(arr[2]);
arr[0] = new b();
arr[1] = new c();
for(int i = 0; i<2; i++)
{
std::cout << arr[i]->action() << ",";
}
return 0;
}
#包括
//甲级
甲级
{
公众:
a();
虚拟int动作();
};
a::a()
{
}
inta::action()
{
返回1;
}
//b类
b类:公共a
{
公众:
b();
int action();
};
b::b()
{
}
intb::action()
{
返回2;
}
//c类
c类:公共a类
{
公众:
c();
int action();
};
c::c()
{
}
intc::action()
{
返回3;
}
int main(int argc,char*argv[])
{
a*(arr[2]);
arr[0]=新的b();
arr[1]=新的c();
对于(int i=0;i您可以使用虚函数获得输出“2,3”:
首先,您应该将类a中的void action();
更改为虚拟void action();
;
其次,应该使用指针实现多态性;
第三,您应该将arr[0]
更改为arr[i]
这是我的密码:
#include <iostream>
//Class a
class a
{
public:
a();
virtual int action();
};
a::a()
{
}
int a::action()
{
return 1;
}
//Class b
class b : public a
{
public:
b();
int action();
};
b::b()
{
}
int b::action()
{
return 2;
}
//Class c
class c : public a
{
public:
c();
int action();
};
c::c()
{
}
int c::action()
{
return 3;
}
int main(int argc, char *argv[])
{
a *(arr[2]);
arr[0] = new b();
arr[1] = new c();
for(int i = 0; i<2; i++)
{
std::cout << arr[i]->action() << ",";
}
return 0;
}
#包括
//甲级
甲级
{
公众:
a();
虚拟int动作();
};
a::a()
{
}
inta::action()
{
返回1;
}
//b类
b类:公共a
{
公众:
b();
int action();
};
b::b()
{
}
intb::action()
{
返回2;
}
//c类
c类:公共a类
{
公众:
c();
int action();
};
c::c()
{
}
intc::action()
{
返回3;
}
int main(int argc,char*argv[])
{
a*(arr[2]);
arr[0]=新的b();
arr[1]=新的c();
对于(int i=0;i您可以使用虚函数获得输出“2,3”:
首先,您应该将类a中的void action();
更改为虚拟void action();
;
其次,应该使用指针实现多态性;
第三,您应该将arr[0]
更改为arr[i]
这是我的密码:
#include <iostream>
//Class a
class a
{
public:
a();
virtual int action();
};
a::a()
{
}
int a::action()
{
return 1;
}
//Class b
class b : public a
{
public:
b();
int action();
};
b::b()
{
}
int b::action()
{
return 2;
}
//Class c
class c : public a
{
public:
c();
int action();
};
c::c()
{
}
int c::action()
{
return 3;
}
int main(int argc, char *argv[])
{
a *(arr[2]);
arr[0] = new b();
arr[1] = new c();
for(int i = 0; i<2; i++)
{
std::cout << arr[i]->action() << ",";
}
return 0;
}
#包括
//甲级
甲级
{
公众:
a();
虚拟int动作();
};
a::a()
{
}
inta::action()
{
返回1;
}
//b类
b类:公共a
{
公众:
b();
国际行动