c++类 初始化const数据成员

对于const或引用类型的类成员,唯一的初始化方式是在构造函数中使用成员函数初始化列表。构造函数体中的赋值语句是无效的

正确

 1 #include<iostream>
 2 using namespace std;
 3  class Cbox{
 4      const    int a ;
 5          int b ;
 6      public:
 7          int g ;
 8      Cbox(int d,int e):a(d){b=e;cout<<"strat";}
 9     ~Cbox(){cout<<a<<" "<<b<<endl;}
10  };
11  int main(){Cbox a (10,20);
12  Cbox b(a);//跟   Cbox b=a;   结果一样
13
14  }

错误

#include<iostream>
using namespace std;
 class Cbox{
     const    int a ;
         int b ;
     public:
         int g ;
     Cbox(int d,int e){a=d;b=e;cout<<"strat";}
    ~Cbox(){cout<<a<<" "<<b<<endl;}
 };

 int main(){Cbox a (10,20);
 Cbox b(a);//跟   Cbox b=a;   结果一样 

 }
时间: 2024-08-24 21:28:44

c++类 初始化const数据成员的相关文章

Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员

有关const成员.static成员.const static成员的初始化: 1.const成员:只能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外,且不加static修饰 3.const static成员:类只有唯一一份拷贝,且数值不能改变.因此,可以在类中声明处初始化,也可以像static在类外初始化 #include <iostream> using std::cout; using std::endl; class base { public: base(int

C++类中常量数据成员和静态数据成员初始化

常量数据成员初始化原则: 在每一个构造函数的初始化列表中初始化 静态数据成员初始化原则: 类内声明,类外初始化(因为它是属于类的,不能每构造一个对象就初始化一次) // test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> #include <vector> using namespace std; class A { public: A(int i):a(0) {} A():

c++类中对数据成员进行初始化和赋值的区别

在c++中定义一个类 ,对于构造函数 我们经常是这么写的: class test { public: test(int n_x , int n_y) { x = n_x; y = n_y; } private: int x , y; }; 这中写法虽然是合法的但比较草率 在构造函数 test(int n_x , int n_y)中 , 我们这样实际上不是对数据成员进行初始化 , 而是进行赋值. 正确的是初始化应该是这样的: class test { public: test() {} test(

static数据成员与const数据成员的定义与初始化

三种数据类型的初始化 1.static int a 的初始化 const int a 的初始化 static const int a的初始化 三种初始化方式 在类外初始化 在构造函数中通过初始化列表初始化 在声明的同时初始化 一.static数据成员 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用"类名.静态成员名"访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员函数不能访问非静态的成员..因为静态成员存在于内存,所以非

c++初始化常量数据成员、静态数据成员。常量静态数据成员

有关const成员.static成员.const static成员的初始化: 1.const成员:只能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外,且不加static修饰 3.const static成员:类只有唯一一份拷贝,且数值不能改变.因此,可以在类中声明处初始化,也可以像static在类外初始化 示例:   #include <iostream> using std::cout; using std::endl; class base { public: bas

类的静态数据成员初始化问题

1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域运算符来指出静态成员所属的类.但如果静态成员是整形const或枚举型const,则可以在类声明中初始化. C++ primer plus P426-P427类静态成员的声明和初始化 //strnbad.h class StringBad { private: static int num_strings; … }; //strnbad.cpp int StringBad::num_strings = 0; 不能在类声

类4(可变数据成员/基于const的重载)

可变数据成员: 有时我们希望能修改某个类的数据成员,即使是在一个 const 成员函数内.可以通过在变量的声明中加入 mutable 关键字来声明一个可变数据成员.mutable 是为突破 const 的限制而设置的.被 mutable 修饰的变量将永远处于可变状态中,即使是在一个 const 成员函数中: 1 #include <iostream> 2 using namespace std; 3 4 class gel{ 5 private: 6 mutable size_t access

在另一个类中做数据成员的对象,可以先不初始化

class A { B b; } 因为在创建A类的时候,会先调用A的构造函数,同时对B类中的b对象调用他的构造函数 下面测试代码 class A { public: int a; A(int x) :a(x){}; }; class B:public A { private: A b; public: B(int x, int y) :A(x), b(y){} void display() { cout << a << endl << b.a << endl

定义一个Circle类,有数据成员Radius(半径)

//成员函数GetArea(),计算圆的面积,构造一个Circle的对象进行测试. #include <iostream> using namespace std; #define PI 3.1415926 class Circle { public : Circle() {}; Circle(double r) { Radius=r; } double GetArea() { return PI*Radius*Radius; } private: double Radius; }; int