Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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++_Oop_New Operator - Fatal编程技术网

C++ 新操作员->;有无 客观的

C++ 新操作员->;有无 客观的,c++,oop,new-operator,C++,Oop,New Operator,尝试了解实例化派生类对象的行为差异 我的作品 创建了一个类“person” 向“person”类添加了一个虚拟方法,该方法将值设置为变量name 定义了从基类“person”派生的类“employee” 向“employee”类添加了一个方法,该方法将值设置为最初在基类中定义的变量name,但添加了“さん" 后面加后缀 创建不同的类型或启动,并测试输出之间的差异 定义类 我创建了一个基类“person”和一个派生类“employee”,如下所示 人 class person { protecte

尝试了解实例化派生类对象的行为差异

我的作品
  • 创建了一个类“person”
  • 向“person”类添加了一个虚拟方法,该方法将值设置为变量name
  • 定义了从基类“person”派生的类“employee”
  • 向“employee”类添加了一个方法,该方法将值设置为最初在基类中定义的变量name,但添加了“さん" 后面加后缀
  • 创建不同的类型或启动,并测试输出之间的差异
  • 定义类 我创建了一个基类“person”和一个派生类“employee”,如下所示

    class person
    {
    protected:
        string name;
    public:
        person();
        ~person();
    
        virtual void setName(string myName)
        {
            name = myName;
        }
    };
    
    员工

    class employee :    public person
    {
    public:
        employee();
        ~employee();
        void setName(string myName)
        {
            name = myName+"さん";
        }
    };
    
    主要 问题: 我了解新人、其他人和其他人的行为

    我不明白为什么extraPerson1和extraPerson2行为不同,尽管两者似乎有相似的启动

    请帮助!

    person extraPerson1 = employee();
    
    您可以将
    employee
    对象转换为
    person
    对象。对象
    extraPerson1
    person
    对象,而不是
    employee
    对象。当您调用其
    setName
    函数时,您正在调用
    person::setName

    多态性和虚函数只有在有指针或引用时才起作用。

    person extraPerson1 = employee();
    
    您可以将
    employee
    对象转换为
    person
    对象。对象
    extraPerson1
    person
    对象,而不是
    employee
    对象。当您调用其
    setName
    函数时,您正在调用
    person::setName

    多态性和虚拟函数只有在有指针或引用时才起作用

    person extraPerson1 = employee();