m_rect (0,0,100,100)
{
m_bCircle = TURE;
m_bPattern = FALSE;
// TODO: 在此处添加构造代码
}
这个构造函数名后面带着冒号是什么意思呢?
10 个解决方案
#1
初始化m_rect
#2
初始化表,用来初始化的
#3
这是一种什么形式呢?就是对出现在函数名后面的“:m_rect() ”这一部分不是很理解,把他们放进{}里面行吗?
#4
初始化列表。。。
Item_base(const std::string &book = "",
double sales_price = 0.0):
isbn(book), price(sales_price) { }
std::string book() const { return isbn; }
Item_base(const std::string &book = "",
double sales_price = 0.0):
isbn(book), price(sales_price) { }
std::string book() const { return isbn; }
#5
初始化Cex13aView的时候先初始化基类非默认构造函数m_rect (0,0,100,100),你无法在子类{}里面调用基类的初始化函数的,要初始化一个带参数的基类,只能通过:的形式实现
#6
#7
这个叫初始化,在构造函数初始化成员的叫赋值
#8
初始化列表
#9
噢,仔细看了下,看名称你的类应该不是继承那个m_rect,这样的话那句语句只是初始化成员变量m_rect,对于成员变量你当然可以放在{}中去初始化,但它这么初始化的好处是少了一次默认初始化的动作,也就是说如果你在{}中调用初始化语句对m_rect赋值其实已经不是初始化了,而是覆盖,相当于会有两次初始化操作,一次是编译器默认无参初始化m_rect(),另一次是你手动初始化m_rect (0,0,100,100)然后赋值给m_rect。还有一种情况是m_rect根本不存在一个无参的构造函数,那样你只能在初始化列表中传递参数给它,而不能在{}中初始化,否则就会报错。记住,在你进入初始化函数执行其中的语句前,所有的成员变量都已经被默认初始化过一次了。“:”后面的语句列表就是你覆盖默认初始化函数的地方
#10
++
#1
初始化m_rect
#2
初始化表,用来初始化的
#3
这是一种什么形式呢?就是对出现在函数名后面的“:m_rect() ”这一部分不是很理解,把他们放进{}里面行吗?
#4
初始化列表。。。
Item_base(const std::string &book = "",
double sales_price = 0.0):
isbn(book), price(sales_price) { }
std::string book() const { return isbn; }
Item_base(const std::string &book = "",
double sales_price = 0.0):
isbn(book), price(sales_price) { }
std::string book() const { return isbn; }
#5
初始化Cex13aView的时候先初始化基类非默认构造函数m_rect (0,0,100,100),你无法在子类{}里面调用基类的初始化函数的,要初始化一个带参数的基类,只能通过:的形式实现
#6
#7
这个叫初始化,在构造函数初始化成员的叫赋值
#8
初始化列表
#9
噢,仔细看了下,看名称你的类应该不是继承那个m_rect,这样的话那句语句只是初始化成员变量m_rect,对于成员变量你当然可以放在{}中去初始化,但它这么初始化的好处是少了一次默认初始化的动作,也就是说如果你在{}中调用初始化语句对m_rect赋值其实已经不是初始化了,而是覆盖,相当于会有两次初始化操作,一次是编译器默认无参初始化m_rect(),另一次是你手动初始化m_rect (0,0,100,100)然后赋值给m_rect。还有一种情况是m_rect根本不存在一个无参的构造函数,那样你只能在初始化列表中传递参数给它,而不能在{}中初始化,否则就会报错。记住,在你进入初始化函数执行其中的语句前,所有的成员变量都已经被默认初始化过一次了。“:”后面的语句列表就是你覆盖默认初始化函数的地方
#10
++