这是成员初始化器列表的示例吗? (第184页,《使用C ++编程原理和实践》,第二版)。

问题描述 投票:2回答:1

我目前在“编程:使用C ++的原理和实践”(第2版,第3版)的第6章中遇到麻烦。

根据书的索引,在第184页上有一个成员初始化列表的示例。

第184页的内容如下:

这里,我们仅提供两个成员函数,为我们提供一种更方便的初始化令牌的方法:

class Token {
public: 
char kind; // what kind of token
double value; // for numbers: a value
};

我们现在可以初始化(“构造”)令牌对象。例如:

Token t1 {'+'}; // initialize t1 so that t1.kind = '+'
Token t2 {'8,' 11.5}; // initialize t2 so that t2.kind = '8' and t2.value = 11.5

这些代码集之一是索引指示的成员初始化程序列表的示例吗?我有些困惑,因为基于另一个Stackoverflow答案(What is this weird colon-member (" : ") syntax in the constructor?),我认为成员初始化器列表看起来更像:

Name_value(string n, int v)
                :name(n), value(v) { }

(由Chrinkus在Github上的以下代码中找到:https://github.com/Chrinkus/stroustrup-ppp/blob/master/chapter06/ex04_Name_value.cpp]

class Name_value {
    public:
        string name;
        int value;
        Name_value(string n, int v)
            :name(n), value(v) { }
};

我认为我误解的可能性比书中有错别字的可能性大,但尽管如此,我还是觉得这部分令人困惑。感谢您提供的任何反馈意见。

c++ list initialization member initializer
1个回答
0
投票

我的简短回答:“关于结构,类,成员和构造函数,您将在本书的后面找到。”

((通常,本书不建议我开始学习c ++,对于初学者来说,我最喜欢的是Alex Allain的C ++入门,因为他在哈佛上过c ++入门课程,并且真的知道初学者想要/需要知道的东西。以正确的顺序)

将您的问题放在正确的环境中:

有许多方法可以用C ++代码表示这个想法。这是我们认为最有用的最简单方法:

     class Token { 
     // a very simple user-defined type 
     public: 
     char kind;
     double value; 
    };

我们现在可以初始化(“构造”)令牌对象。例如:

Token t1 {'+'};
Token t2 {'8',11.5};
// initialize t1 so that t1.kind = ‘+’
// initialize t2 so that t2.kind = ‘8’ and t2.value = 11.5

我认为我误解的可能性比发生错误的可能性大得多。这本书上有错字,但尽管如此,我还是在找本书的这一部分令人困惑。感谢您提供的任何反馈意见。

是的,你是对的,你弄错了,这本书令人困惑:)

我更长的答案:在本书的这一点上,您还不了解许多std c ++概念,而为Bjarne编写本书的人“他们”并不是试图教您类或结构,而是指出...

...一种语言无法提供成千上万种类型:谁会定义它们,实施它们的人,如何找到它们,以及手册必须厚多少?像大多数现代语言一样,C ++通过让我们定义自己的类型(用户定义类型)何时需要它们。

就这些。

在c ++ class中,您可以做很多很酷的事情,例如使用class的构造函数初始化变量,就像您在答案中引用的那样。

当您调用class本身时,您有机会在“类构造函数”调用中直接初始化(“ construct”)] >>您的“ class变量”。

看起来您的示例中调用了类Name_value

        Name_value(string n, int v)
            :name(n), value(v) { }

调用class本身意味着:这是“ a构造函数”

不要与“ initialize(” construct“)]

混淆class中的内容。书中缺少的-使用您的代码-类似于:
class Token {
    public:
    char kind; //what kind of token
    double value; //for numbers: a value

    void initialize()
    {
       Token t1 {'+'}; // initialize t1 so that t1.kind = ‘+’
       Token t2 {'8',11.5}; // initialize t2 so that t2.kind = ‘8’ and t2.value = 11.5
    }
};

此代码也是有效的,因为constructor

由c ++ /编译器为您创建。

我希望这可以帮助您在书中走得更远,并为您澄清一些。尽管如此,我还是强烈建议您从另一本对初学者更友好的书开始,以避免重大的挫败感,并取得许多小的胜利,以克服潜在的真正不必要和可避免的挫败感。

我对这本书的2美分:

这本书适合以前从未编程过但愿意努力学习。第32页

正在错过领导。

到目前为止,我们已经教过成千上万的一年级学生使用德克萨斯农工大学的这本书,大约60%在此之前,大约40%的人从未在他们的生活中见过代码。大多数成功,所以您也可以做到。第35页

**我的估计猜测是:40%的人在本书的60%的帮助下几乎没有,但很可能没有。

我和大多数其他C ++编程书籍遇到的问题是,它们使我/我们开始感到愚蠢-而您却不是! -,因为作者无法正确教授该语言。

我认为/经验中有一些很好的教学例外,它们不会使初学者感到愚蠢,但实际上是在尝试相反的做法:帮助您在编程中获得乐趣!跳转到c ++是其中之一。

如果您在阅读了有关C ++的优秀书面入门初学者之后阅读了本书,您的问题和许多其他证据证明我是对的,那么本书会变得更有帮助,并且意义更大。*

© www.soinside.com 2019 - 2024. All rights reserved.