在我的笔记中,我正在浏览这个显示
的页面class Student{
public:
Student()
{
age = 5; //Initialize age
};
private:
int age; // **Cannot initialized a class member**
string name; // **Cannot initialized a class member**
};
您无法初始化班级成员是什么意思?这是关于构造函数初始化列表的主题。我已经使用此代码在VS中进行了测试,它运行正常。
class TestClass
{
int number = 27; //The member is initialized without a problem.
public:
TestClass();
int getNumber(); // Return number
~TestClass();
};
如果我问一个愚蠢的问题,我很抱歉,但我希望通过在这里发布这个问题来更好地学习。
答案 0 :(得分:2)
第二个例子(在声明点初始化非静态类成员)仅在C ++ 11或更高版本中被允许。
第一个在C ++ 11之前有效,尽管通常认为使用初始化列表实现构造函数更好,而不是在构造函数体中分配它。
set to :<?php echo $name; ?>
如果您打算使用较旧的(C ++ 11之前的版本)编译器,则无法在声明时初始化非静态成员。
如果您希望您的代码仅适用于C ++ 11(或更新的)编译器,那么这两个选项都是有效的,并且选择归结为编码风格(即它是主观的)。
答案 1 :(得分:1)
在c ++ 11之前,您无法初始化非静态变量。你需要使用getter和setter。
class Student{
public:
Student()
{
age = 5; //Initialize age
};
private:
int age; // **Cannot initialized a class member**
string name = "Hello"; // Invalid
};
答案 2 :(得分:0)
如果您是印度裔和12年级学生,这个答案适合您......
请参阅代码1完全正常,并且将根据c ++的所有标准运行良好。在代码2中,如果使用的是比c ++ 11更早的标准
,则只能在声明时初始化静态成员现在,印度学校普遍教授的标准是比c ++ 11更早的标准(我猜是c ++ 03)。但VS使用最新的编译器并相应地编译代码。因此,您的代码在VS上运行,但根据书籍
是错误的