[英]Constructor default-public and private variables
我知道Java并且我现在正在学习c ++。我比其他语言更容易学习它具有很多相同的东西。我的问题是在一本书的课上有完整的构造函数,但我在任何地方都没有面对默认的构造函数。构造函数,如果可以,我应该写它吗?此外,我还想测试什么,该类上有public:
下面是变量,一段时间后有private:
变量;下面是一些变量也像java的public和privates变量吗? 但是不要写private int numbers;
在C ++上我们编写
private:
int numbers;
int coffee;
我对吗?
很难确切地说出您的要求。 但是:1)如果您自己不创建任何构造函数,则会为您生成一个默认构造函数。 默认情况下是公开的。 2)生成的默认构造函数将按声明顺序(虚拟基数(如果有的话),深度先从声明的顺序,从右到左,然后按声明的左至右顺序的普通基数,默认构造基类和该类的成员,然后是成员变量(按声明顺序)。如果不能默认构造任何成员变量,则无法为您生成默认构造函数3)如果存在const成员或引用成员,或者没有默认构造函数的成员,或者您的类具有没有默认构造函数的基础,因此无法生成默认构造函数,因为这些成员必须使用一个或多个值进行初始化。 4)如果您定义了一个构造函数,并且还希望编译器为您生成一个默认构造函数,并且该默认构造函数在您的代码中有效,请执行以下操作:
class MyClass
{
public:
MyClass() = default; // explicitly tell compiler to generate a default
MyClass(int x) { ...} // normally would suppress gen of default ctor
};
如果我了解您有关访问说明的问题,它们就像标签,并且跟随它们的所有内容都具有访问说明,直到您编写另一个对其进行更改为止。 在类中,默认情况下,访问权限是私有的。 在结构中,访问是公共的。
希望这可以帮助。
至少可以说,您的老师正在标记不包括默认构造函数的事实很有趣。
作为通用原则,在Java和C ++中, 构造函数都负责将对象初始化为完全形成的状态。 之所以要使用默认构造函数,是因为可以在没有任何明确输入的情况下构造一个完整的对象。 但这可能会变得很奇怪:
//Java
public class Student {
public String name;
public int age;
public Student() {
this("", 0);
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
//C++
class Student {
public: //Everything after this point has 'public' access modifier; is like putting
//'public' in front of each variable and method
std::string name;
int age;
Student() : Student("", 0) {}
Student(std::string name, int age) : name(std::move(name)), age(age) {}
};
在此示例中, Student
具有一个构造函数,用于使用提供的值初始化该对象,以及一个默认构造函数,用于将对象初始化为具有空名称和年龄0。
但是想想: 这有意义吗? 一个有效的Student
对象没有名称是否有意义,或者如果您不知道它们的名称,就可以构造一个Student
对象吗? 暂时忘记功能要求(即,如果对象没有默认构造函数,则数组可能很难构造),逻辑上说,如果没有这样的输入就可以构造对象,这在逻辑上是不一致的。 根据您的用例, 没有默认构造函数可能更有意义。
因此,确定是否在代码中包含Default-Constructor是设计原则,与您使用Java还是C ++或大多数编程语言无关。
关于您的其他问题:
public:
, protected:
和private:
与Java有不同的规则( public
和private
基本相同, protected
是单数一出,C ++中不存在Java的default
,但可以通过使用来模拟friend
关键字),但它们的行为易于识别:
class example {
//private:
//'class' declarations have everything 'private' by default, 'struct' makes things 'public' by default
int val; //is private
std::string type; //is private
public: //Will be public until another access modifier is used
example() {} //is public
example(int val, std::string type) : val(val), type(std::move(type)) {} //is public
void do_something() { //is public
private_function();
}
private: //Will be private until another access modifier is used
void private_function() { //is private
val++;
}
};
在Java中,您将编写如下相同的代码:
public class example {
private int val;
private String type;
public example() {}
public example(int val, String type) {
this.val = val;
this.type = type;
}
public void do_something() {
private_function();
}
private void private_function() {
val++;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.