参数的含义是:
int volatile vInt;
当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。volatile用在如下的几个地方:
1) Empty(); // 默认构造函数//
2) Empty( const Empty& ); // 拷贝构造函数//
3) ~Empty(); // 析构函数//
4) Empty& operator=( const Empty& ); // 赋值运算符//
C++ 标准库可以分为两部分:
1、标准函数库: 这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自 C 语言。
2、面向对象类库: 这个库是类及其相关函数的集合。
1、string 是c++标准库里面其中一个,封装了对字符串的操作,实际操作过程我们可以用const char*给string类初始化。
三者的转化关系如下所示:
1、string转const char*
string s = “abc”;
const char* c_s = s.c_str();
2、const char * 转string,直接赋值即可
const char* c_s = “abc”;
string s(c_s);
3、string 转char*
string s = “abc”;
char* c;
const int len = s.length();
c = new char[len+1];
strcpy(c,s.c_str());
4、char * 转string
char* c = “abc”;
string s(c);
5、const char* 转char*
const char* cpc = “abc”;
char* pc = new char[strlen(cpc)+1];
strcpy(pc,cpc);
6、char* 转const char*,直接赋值即可
char* pc = “abc”;
const char* cpc = pc;
使用引用参数的主要原因有两个:
一般的原则:
对于使用引用的值而不做修改的函数:
对于修改函数中数据的函数:
对象的静态类型: 对象在声明时采用的类型。是在编译期确定的。
对象的动态类型: 目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。
静态绑定: 绑定的是对象的静态类型,某特性(比如函数依赖于对象的静态类型,发生在编译期。)
动态绑定: 绑定的是对象的动态类型,某特性(比如函数依赖于对象的动态类型,发生在运行期。)
//利用静态数据成员的数据共享这个性质
class Widget {
public:
Widget() { ++count; }
Widget(const Count&) { ++count; }
~Widget() { --count; }
static size_t getCount() { return count; }
private:
static size_t count;
};
//然后在main外写上
size_t Widget::count = 0;
//在main里写上
cout << Cylinder::getCount();
成员初始化列表会在什么时候用到?
调用过程: