一、遇到问题
在学习ns3源码的过程中,经常遇到这样的结构
TcpCongestionOps::TcpCongestionOps () : Object ()
{
}
这些双冒号和单冒号到底是什么意思呢?其实这是C++中的类构造函数。
(注意:只有构造函数可以初始化成员变量)
二、类构造函数学习
参考链接:c++类构造函数&析构函数
在用冒号的形式写类构造函数时,我们需要注意:
- 只有构造函数可以初始化成员变量
- 构造函数和成员变量需要在类中预先声明
- 结构ClassA::fundctionA(int m_member):member(m_member){}。是在函数functionA中,对成员变量member赋值m_member。
三、示例代码
#include<iostream>
using namespace std;
class Food{
public:
Food(int len);
Food(int m_rate,int m_cost);
int rate;
int cost;
};
//only constructors take member initializers
Food::Food(int len):rate(),cost(){
printf("using Food(int len)\n");
}
Food::Food(int m_rate,int m_cost):rate(m_rate),cost(m_cost){
printf("using Eat(int m_rate,int m_cost)\n");
}
int main ()
{
Food food1(1);
// printf("rate:%d\n",food.rate);
cout << "rate : " << food1.rate <<endl;
cout << "cost : " << food1.cost <<endl;
Food food2(1,1);
cout << "rate : " << food2.rate <<endl;
cout << "cost : " << food2.cost <<endl;
return 0;
}
代码输出: