【问题标题】:Only defined inside a class仅在类内部定义
【发布时间】:2018-11-05 14:23:02
【问题描述】:
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <string>
using namespace std;
class Meny
{
public:
    void Meny2()
    {
        cout << "Welcome " << Name << LastName;
    }
};

class Kund
{
public:
    string  Name, LastName, personnummer;

    void LoggaIn()
    {
        cout << "Please enter your full name: " << endl;
        cin >> Name >> LastName;
        cout << "Please enter your social security number: " << endl;
        cin >> personnummer;
    }
};

所以目前cout &lt;&lt; "Welcome " &lt;&lt; Name &lt;&lt; LastName; 不会工作,因为NameLastNameMeny 类中未定义,有没有办法让它们被定义,即使它们是在另一个类中定义的?

【问题讨论】:

  • 实例化一个对象?
  • 不同的类是不同的作用域。您必须有权访问范围内的这些变量,例如通过访问包含它们的类的实例。这是语言的基本规则
  • 将用户传入菜单?

标签: c++ class c++11 inheritance


【解决方案1】:

NameLastName 不是 Meny 的属性。它们是Kund 的属性。所以这些属性是不可访问的。您必须以某种方式使其易于访问。

#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <string>
using namespace std;

class Kund
{
public:
    string  Name, LastName, personnummer;

    void LoggaIn()
    {
        cout << "Please enter your full name: " << endl;
        cin >> Name >> LastName;
        cout << "Please enter your social security number: " << endl;
        cin >> personnummer;
    }
};

class Meny
{
public:
    void Meny2(const Kund& k) const
    {
        cout << "Welcome " << k.Name << k.LastName;
    }
};

或子类

class Meny: public Kund
{
public:
    void Meny2() const
    {
        cout << "Welcome " << Name << LastName;
    }
};

或模板

template <typename T>
class Meny: public T
{
public:
    void Meny2() const
    {
        cout << "Welcome " << Name << LastName;
    }
};

或者在函数中使用模板

class Meny
{
public:
    template <typename T>
    void Meny2(const T& k) const
    {
        cout << "Welcome " << k.Name << k.LastName;
    }
};

【讨论】:

  • 当我在第一个调用 Meny2 时 ( ) 中会出现什么?
  • 对于第一个,它将是对 Kund 对象的引用。例如Kund k; Meny m; m.meny2(k);
  • 也许你回答了我的问题......但是如果我有一个 int main() 并且在其中我想调用该函数,我会这样做
  • Meny MenyObjekt; MenyObjekt.Meny2();但它对 () 中的函数调用中的参数很少
  • 只有当每个Meny 真的是Kund 都自然有意义时,才应该使用子类化。如果没有意义,请勿仅将其用于访问变量、函数等。
猜你喜欢
  • 1970-01-01
  • 2014-11-12
  • 2015-06-17
  • 2016-04-21
  • 2018-10-19
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
相关资源
最近更新 更多