Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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();
国际行动