一、构造函数初始化
构造函数可以以列表的形式初始化成员变量:
MyClass::MyClass(int a, int b) :p_a(a), p_b(b)
{
}
也可以在函数体中赋值
MyClass::MyClass(int a, int b)
{
p_a = a;
p_b = b;
}
二、explicit关键字
//MyClass.h
#pragma once
class MyClass
{
private:
int p_a, p_b;
public:
MyClass(int a);
int Add();
};
//
//MyClass.cpp
#include"MyClass.h"
MyClass::MyClass(int a) :p_a(a)
{
}
int MyClass::Add()
{
return p_a *2;
}
//main.cpp 编译、执行都没问题
#include<iostream>
#include"MyClass.h"
using namespace std;
void fun(MyClass c1)
{
cout << c1.Add() << endl;
}
int main()
{
MyClass c(10);
cout << c.Add() << endl;
fun(c);
fun(50);//编译时发现可以初始化成类MyClass,所以没有问题
return 0;
}
但如果在声明构造函数前添加“explicit”关键字,则编译出错(只能在构造函数声明前添加,不能在定义时添加)
即public:
explicit MyClass(int a);