默认的构造函数不带参,无初始化成员变量的功能。若无其他构造函数时,默认构建函数可省略,但若有一个其他构造函数时,则默认构造函数不能省略。
栈上分配对象时,若使用默认构造函数,则对象变量后面不加空的(),若用带参构造函数,需要加上(初始化参数)。
// test.h
#include <iostream>
#include "test.h"
using namespace std;
void MAN::person::eat(void) {
cout << name << "eat" << endl;
}
void MAN::person::work() {
if (this->male) {
cout << this->name << "coding" << endl;
}
else {
cout << this->male << "accounting" << endl;
}
}
void MAN::person::sleep(void) {
cout << this->name << " sleep" << endl;
}
// test.cpp
#include <iostream>
#include "test.h"
using namespace std;
void MAN::person::eat(void) {
cout << name << "eat" << endl;
}
void MAN::person::work() {
if (this->male) {
cout << this->name << "coding" << endl;
}
else {
cout << this->male << "accounting" << endl;
}
}
void MAN::person::sleep(void) {
cout << this->name << " sleep" << endl;
}
// main.cpp
#include <iostream>
#include "test.h"
using namespace MAN;
int main(void) {
person zhangsan; // 创建了一个person的对象,分配在栈上
zhangsan.name = "zhangsan";
zhangsan.age = 23;
zhangsan.male = 1;
zhangsan.eat();
zhangsan.work();
zhangsan.eat();
zhangsan.work();
zhangsan.sleep();
}
成员初始化列表,一般用于带参的构造函数中,用来给属性传参赋值。成员初始化列表和构造函数之间用冒号间隔,多个列表之间用逗号间隔。
//test.h
namespace MAN {
class person {
public:
string name;
int age;
bool male;
person() {};
person(string name, int age) {};
void eat();
void work();
void sleep();
private:
}; /*End of persion */
} /* End of MAN namespace*/
//test.cpp
MAN::person::person(string myname, int myage) :name(myname), age(myage) {
cout << "user defined constructor" << endl;
}