c++以下定义类函数后加冒号是什么意思 何时这么用

c++以下定义类函数后加冒号是什么意思 何时这么用c++

如 M( const char* in_file ):m_w(),m_object_morph(true)
这是对类成员初始化的意思,通常用于对父类成员初始化。
若是子类中有无参构造函数而而父类中没有声明,则程序会没法经过编译。举例以下:

#include "stdafx.h"
class testP
{
public:
 int t1;
 int t2;
public:
 //testP(int t = 1){}  //正确
 testP(int t){}
 testP(const testP&t ){}  //没有const也能够经过编译,在C++PRIMER中说“传统上咱们声明为const”p584(14-2-3节。)
 void set(){};//注意这个分号,包括CPP中函数后加上,他不表明类中的函数能够跟一个分号,而是表明一个空语句。
};
class testStatic:public testP
{
public:
 testStatic():testP(1){}//正确:在这里虽然找不到父类无参构造函数,但公开声明了一个带参函数
 static void test();
 void nonstatic();
public:
 static int t;
};
int testStatic::t = 0;
void testStatic::test()
{
  
}
void testStatic::nonstatic()
{
 test();
}

int main(int argc, char* argv[])
{
 testStatic::test();
 testStatic t;
 t.set();
 printf("Hello World!\n");
 return 0;
}

二、拷贝构造函数的定义方法

 testP(const testP&t ){}  拷贝函数应该这样定义,虽然没有CONST也是能够经过编译的。但不推荐那样作,由于作为拷贝函数,你首先要保证被复制者不能改变,也就是说不能在复制过程当中改变,因此要加上CONST。

三、冒号的错误理解:

void set(){};象这样咱们在一个函数后面加一个分号,或者在把成员函数直接定义在类头文件里时,加上一个分号,不表明函数后面能够任意有无一个分号,而是那个分号表明这是一条空语句。