为什么数据成员在菱形问题 C++ 中不继承

问题描述

所以,我正在学习继承,去年的问题集中有一个问题。这只是为了创建一个菱形问题并将数据成员 <div id="displayDiv"></div> <script> // The callback function should be the parameter to pass to the // withSuccessHandler method,and the final function call is // the name of the function in Google Apps Script to call: google.script.run.withSuccessHandler(displayValue).getCellValue() // define the callback function: function displayValue(value) { // get the element wih ID "displayDiv" and set its inner HTML to // the value returned by Google Apps Script: document.getElementById("displayDiv").innerHTML = value; } </script> 从基类继承到 marks。因此,我为 final class 创建了一个抽象基类并在所有继承的类中覆盖它。为了解决歧义,我在继承声明中添加void setmarks()

这是我的代码

virtual

在在线 #include <iostream> using namespace std; class Evalution { public: float marks; virtual void setmarks()=0; void displaymarks() {} }; class Theoretical :virtual protected Evalution { public: float internal1,internal2; int assignments; void setmarks() { cout << "enter the marks in internal1,internal2,assignments" << endl; cin >> internal1 >> internal2 >> assignments; } }; class Practical :virtual protected Evalution { public: float lab,viva; void setmarks() { cout << "enter the marks in lab and viva" << endl; cin >> lab >> viva; } }; class Final : public Theoretical,public Practical { public: marks = internal1 + internal2 + assignments + lab + viva; void setmarks() {} void displaymarks() { cout << "the final marks is " << marks << endl; } }; int main() { Final f; f.Theoretical::setmarks(); f.Practical::setmarks(); f.displaymarks(); } 上运行程序时,出现错误 gcc compiler。什么地方出了错?即使:

‘marks’ does not name a type

还有:

class Evalution
{
    public:
     //float marks;
     virtual void setmarks()=0;
     void displaymarks() {}
};

该程序仍然给我一个垃圾值。请帮忙。

解决方法

此时,编译器需要一个成员声明

class Final : public Theoretical,public Practical {
public:
    marks = internal1 + internal2 + assignments + lab + viva;

因此它寻找一种类型。但是 marks 不是类型,而是基类中的成员变量。这就是编译器抱怨

的原因

'marks' 没有命名类型


当你把它改成

float marks = ...;

编译器看到预期的成员声明。

但是这次成员 marks 是在对象构造时初始化的,而不是在其他成员被分配适当的值之后。


有关详细信息,请参阅 Class declarationNon-static data members,或者 The Definitive C++ Book Guide and List

中的其中一本书 ,

您需要先通过internal1基类方法设置变量internal2setmarks()等,然后计算最终分数,然后通过计算总和来设置最终分数全部。

#include <iostream>

using namespace std;

class Evalution

{

    public:
    float marks;

    virtual void setmarks()=0;
    
    void displaymarks() {}

};


class Theoretical :virtual protected Evalution
{
    public:
    float internal1,internal2;
    int assignments;
    
    void setmarks()
    {
        cout << "enter the marks in internal1,internal2,assignments" << endl;
        cin >> internal1 >> internal2 >> assignments;
        //internal1 = 10;
        //internal2 = 20;
        //assignments = 30;
    }
};


class Practical :virtual protected Evalution
{
    public:
    float lab,viva;
    
    void setmarks()
    {
        cout << "enter the marks in lab and viva" << endl;
        cin >> lab >> viva;
        //lab = 234;
        //viva = 45;
    }
};


class Final : public Theoretical,public Practical
{
    public:
    
    void setmarks() {
        this->Theoretical::setmarks();
        this->Practical::setmarks();
        marks = internal1 + internal2 + assignments + lab + viva;
    }
     void displaymarks()
    {
        cout << "the final marks is " << marks << endl;
    }
};

int main()
{
    Final f;
    f.setmarks();
    f.displaymarks();
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...