Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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++;,请向Python用户解释类? 我正在学习C++,感谢本文,我发现C++和Python和JavaScript之间有很多相似之处: 但是我不能理解C++类,它们看起来像JavaScript原型,但不是那么容易。_C++ - Fatal编程技术网

C++;,请向Python用户解释类? 我正在学习C++,感谢本文,我发现C++和Python和JavaScript之间有很多相似之处: 但是我不能理解C++类,它们看起来像JavaScript原型,但不是那么容易。

C++;,请向Python用户解释类? 我正在学习C++,感谢本文,我发现C++和Python和JavaScript之间有很多相似之处: 但是我不能理解C++类,它们看起来像JavaScript原型,但不是那么容易。,c++,C++,例如: //CLxLogMessage defined in header class myLOG: public CLxLogMessage{ public: virtual const char * GetFormat (){ return "Wavefront Object"; } void Error (const std::string &msg){ CLxLogMessage::Err

例如:

//CLxLogMessage defined in header

class myLOG: public CLxLogMessage{
  public:
    virtual const char *    GetFormat (){
            return "Wavefront Object";
    }

    void    Error (const std::string &msg){
            CLxLogMessage::Error (msg.c_str ());
    }

    void    Info (const std::string &msg){
            CLxLogMessage::Info (msg.c_str ());
    }

 private:
    std::string     authoringTool;
};
问:这些公共/私人的东西到底是什么

<>编辑:老实说,我更喜欢C++,而不是Python,因为我可以学习所有事物的真义,而不是简单的自动化命令,例如我更喜欢单独使用“int x”而不是“x”。
感谢

私有和公共与数据封装有关,这意味着您可以更改类的实现,而不影响其使用方式。我建议读一些面向对象的理论。

myLOG
是这个类的名称。它继承(查找它2)自
CLxLogMessage
,并具有函数
GetFormat
(它是
virtual
,可以被子类覆盖并通过基类指针调用,查找它2)、
Error
Info
。它有一个数据成员
authoringTool
,它是一个字符串

public
private
是访问说明符。
private
部分中的内容只能由类的成员函数使用,而
public
部分中的内容可以由任何人使用。还有另一种类型的节称为
protected
,这意味着只有一个类及其子类可以访问它,但没有其他人可以访问它1

如果开始向类中添加内容时没有先设置访问级别,则默认为
private

您可以按任意顺序拥有任意数量的
公共
私有
受保护

您需要这些不同的保护级别,因为您不希望其他人在您不知道的情况下干扰您的数据。例如,如果您有一个表示分数的类,您不会希望有人在您的鼻子下面将分母更改为0。他们必须通过setter函数来检查新值是否有效,然后再将分母设置为它。不过,这只是一个微不足道的例子。Python没有这些功能,这是该语言设计中的一个缺点

如果你读过C++书籍,你所有的问题都会得到解答。使用C++没有简单的方法。如果你尝试去做一个,你最终会成为一个可怕的C++程序员。 1您可以让其他人通过将成员声明为
friend
s来访问
private
protected
成员(查阅2)


很抱歉说了这么多“查找”,但信息太多了,我无法放在这里。你必须为这类事情找到一个好的资源。

即使没有办法给出一个全面的答案或任何类似的答案,也可以这样想:类是类型。考虑这一点:

int n;
这里“int”是类型的名称,“x”是“int”类型的变量。C++中有基本类型,如“int”、“char”、“double”。现在,我们还可以从旧类型中创建新的复合类型:

struct Foo
{
  int n;
  char c;
  double d;
};
这定义了一个称为“Foo”的新类型,以及
foox生成该类型的新变量。现在我们可以为“Foo”类型添加一些魔力:

关键字
struct
class
的意思几乎相同,因此我们仍然有一个复合类型,它有两个成员变量,
n
d
。但是,这种类型也有一个成员函数,每次创建新的Foo对象时都会调用这个函数。所以当你说,
foox
,则此变量的成员值
x.n
将设置为20,
x.d
将设置为0.5


简而言之:类是具有内置魔力的类型。你就是魔术师。

你真的需要一本好书来开始。@Ndv:解释“C++类,公共/私人内容”是整本书的主题。对于这个问答网站来说太宽了。这可能是一个很好的开始,您可以继续。Python不也有类和面向对象吗?这些应该是非常相似的(尽管我已经有一段时间没有使用Python了,而且时间很短)。如果不是,那我就感到羞愧,但是在你想从Python到C++学习资源中学习C++之前,你应该先学习Python。@德尔南OK,那么他的问题至少是措辞不好的,因为他应该知道一个类是什么,它是如何工作的,并且只是不清楚私人/公共的东西。C++不是你的。你试过找教程吗?互联网上到处都是这些东西。@Ndv:如果你真的知道Javascript和Python面向对象的方法,你就不会问这个问题。你第二段的最后一个
private
应该是
protected
,我想是+1,但我想第三个
private
应该是
protected
@Ndv哎哟,有个打字错误,更新。我刚才提到的另一个部分叫做
受保护的
,而不是
私有的
。感谢Iccarrasco和Mat,我发现了错误并修复了它。@Ndv你知道Python类吗?基本上是一样的,但有更多的功能。@Ndv“更多功能”的哪些部分你不了解?小步骤。这并不难,只是有很多:——)
class Foo
{
  int n;
  double d;

public:
  Foo() : n(20), d(0.5) { }   // "constructor"
};