如何通过使用C ++中的构造函数获取父类的变量来在子类中实现Abstarct类的方法

史蒂夫·西度(Steve Siddu):

首先,有一个名为Shape的父类,它有两个构造函数,一个带有一个参数,另一个带有两个参数。有两个类从“ Shape”类继承属性。它们是Rectangle和Circle。

我使用Java进行了尝试,得到了想要的东西。

这是java实现。


package javaapplication6;
import java.io.*; 

abstract class Shape{
    protected int radius,length,width;
    
    public Shape(int n){
        radius=n;
    }
    
    public Shape(int x,int y){
        length=x;
        width=y;
    }
    
    abstract public void getArea();
}

class Rectangle extends Shape{
    
    public Rectangle(int x,int y){
        super(x,y);
    }
    
    public void getData(){
        System.out.println(length+" "+width);
    }
    
    public void getArea(){
        System.out.println("Area of Reactangle is : "+width*length);
    }
}

class Circle extends Shape{
    
    public Circle(int x){
        super(x);
    }
    
    public void getData(){
        System.out.println(radius);
    }
    
    public void getArea(){
        System.out.println("Area of Reactangle is : "+2*radius*3.14);
    }
}

public class JavaApplication6 {
    
    public static void main(String[] args) {
        
        Rectangle r=new Rectangle(3,4);
        r.getData();
        r.getArea();
        
        System.out.println();
        
        Circle c=new Circle(3);
        c.getData();
        c.getArea();
    }
    
}

我想要确切的东西在C ++中实现。

我尝试如下

#include<bits/stdc++.h>
using namespace std;

class Shape{
    public:
        int r,x,y;
        
        Shape(int rad){
            r=rad;
        }
        
        Shape(int height,int width){
            x=height;
            y=width;
        }
        
        void getClass(){
            cout<<"Ur in class shape"<<endl;
        }
        
        virtual void getArea();
};

class Rectangle : public Shape{
    public:
        
        Rectangle(int x,int y):Shape(x,y){}
        
        void getArea(){
            cout<< "Area of rectangle : "<<x * y<<endl;
        }
        
        void getClass(){
            cout<<"Ur in class Rectangle"<<endl;
        }
};

class Circle : public Shape{
    public:
        
        Circle(int r):Shape(r){}
        
        vooid getArea(){
            cout<< "Area of Circle : "<<2* 3.14 * r<<endl;
        }
        
        void getClass(){
            cout<<"Ur in class Circle"<<endl;
        }
};

int main(){
    Circle c(5);
    c.getClass();
    c.getArea();
    
    Rectangle r(3,4);
    r.getClass();
    r.getArea();
    
}

但是我出错了。

abstract.cpp:(.rdata$.refptr._ZTV5Shape[.refptr._ZTV5Shape]+0x0): undefined reference to `vtable for Shape'
idclev 463035818:

您会收到错误消息,因为没有的定义Shape::getArea,也没有将其声明为纯虚拟的:

virtual void getArea();

要使其成为纯虚拟的,您需要:

virtual void getArea() = 0;

另外,您应该提供一个虚拟的析构函数。什么时候需要它,什么时候不超出这个问题的范围。最简单的就是提供它:

virtual ~Shape(){};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在子类构造方法中获取父类变量值

使用父类的变量来调用子类中的函数[java示例中的多态]

如何从父类构造函数中获取变量并在子类中使用它?

如何实现从其基类中获取变量的构造函数?

如何通过父类指针使用未在父类中定义的子类方法?

如何访问子类中的父类方法

如何让子类中的构造函数继承构造函数或基类?

如何在子类中触发父模板类的复制构造函数

这段代码中如何使用super关键字来调用父类的构造函数?

如何使用实现父接口的类中的构造函数初始化接口类型的对象?

如何使用__init_subclass__而不是ABCMeta来实现子类以实现父类的抽象方法?

如何在父类的函数中调用子类的函数

如果在子类中未定义父类,则该子类是否使用父构造函数?

具有子类中的函数的抽象函数的C ++父类

通过父类中的函数访问子类属性

没有'this()'函数的子类如何识别父类中的实例变量?

有什么办法可以在JAVA中使用父类的对象来调用子类的构造函数?

Django / Python:如何从子类中的父类调用函数?

如何覆盖子类中的抽象类构造函数

如何从具体子类中的重写方法访问通过抽象类中的构造函数实例化的对象的属性?

当父类在 C++ 中没有默认构造函数时,如何在继承的类中使用构造函数?

如何从类中的函数中获取变量?

如何在子方法内访问子类中的父类变量?

如何在同名的子类方法中调用父类方法?

如何创建强制子类调用构造函数中特定方法的抽象适配器类

C#如何从子类中读取父类和子类所有变量的名称

为什么我们不能使用Java子类方法中的super关键字来调用超类构造函数?

无论如何,JAVA中是否有在超类的构造函数之前执行子类的构造函数的方法?

类构造函数中使用的Enum,类中的方法无法识别参考变量