项目场景:
编写以下程序
#include<iostream>
using namespace std;
class test{
private:
char ch='a';
public:
test(){}
};
int main(){
test t1;
return 0;
}
用g++编译
g++ test.cpp
问题描述:
编译时出现警告:"warning:non-static data number initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]"。
原因分析:
成员初始化的方式错误,c++类为对象的抽象,不能储存变量的值
解决方案:
修改:
#include<iostream>
using namespace std;
class test{
private:
char ch;
public:
test():ch('a'){}
};
int main(){
test t1;
return 0;
}
总结和扩展
c++成员变量初始化方法总结如下:
类普通成员变量初始化
1.将类成员定义为const static类型直接初始化
const static char ch='a';
2.成员初始化列表赋值
class test{
private:
char ch;
public:
test():ch('a'){
}
};
3.在构造函数中初始化
class test{
private:
char ch;
public:
test(){
ch='a';
}
};
特殊成员变量的初始化
1.const变量:在成员初始化列表赋值
class test{
private:
const char ch;
public:
test():ch('a'){
}
};
2.引用变量:在成员初始化列表赋值
class test{
private:
char &ch;
public:
test(char a):ch(a){
}
};
3.static变量:在类外初始化
class test{
private:
static char ch;
public:
test(){
}
};
char test::ch='a';
需要注意的是,即使不对static类型成员变量初始化,也要在类外进行定义,否则编译时会报错
class test{
private:
static char ch;
public:
test(){
}
};
char test::ch;
4.const static变量:直接赋值或在类外赋值
class test{
private:
const static char ch1='a';
const static char ch2;
public:
test(){
}
};
const char test::ch2='b';
5.没有无参构造函数的对象变量:在构造函数的在成员初始化列表中初始化变量
#include <iostream>
using namespace std;
class CA{
public:
CA(int arg){//只有一个有参构造函数
cout<<"initialized with arg "<<arg;
}
private:
};
class CB{
public:
CB(int arg):ca(arg){//使用参数初始化ca对象
}
private:
CA ca;
};
int main(){
CB cb(1);
}