C++基础语法学习(3)

1.对象初始化列表:当成员变量是一个对象,且该对象没有无参构造函数

1.必须这样做:
如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,
如果没有初始化列表,那么他将无法完成第一步,就会报错。
 
2、类成员中若有const修饰,必须在对象初始化的时候,给const int m 赋值
当类成员中含有一个const对象时,或者是一个引用时,他们也必须要通过成员初始化列表进行初始化,
因为这两种对象要在声明后马上初始化,而在构造函数中,做的是对他们的赋值,这样是不被允许的。
2)C++中提供初始化列表对成员变量进行初始化
语法规则
Constructor::Contructor() : m1(v1), m2(v1,v2), m3(v3)
{
    // some other assignment operation
}
3)注意概念
初始化:被初始化的对象正在创建
赋值:被赋值的对象已经存在
 

2.构造函数调用顺序与初始化列表无关,与对象的声明顺序有关,析构顺序与其相反

3.匿名对象, Test(1,2) 其生命周期只有这一行代码

4.new, delete(关键字)

new int;            //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
new int(100);  //开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址
new char[10];  //开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
new int[5][4];  //开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址
float *p=new float (3.14159);  //开辟一个存放单精度数的空间,并指定该实数的初值为//3.14159,将返回的该空间的地址赋给指针变量p

堆上申请的空间 默认初值为0,栈上的为垃圾值

5.对象指针用malloc不会调用构造函数,用new分配时会调用构造函数,但不会调用析构函数,因为在栈上,需要手动调用delete来释放空间

6. 静态成员变量:把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static 成员
 静态成员局部于类,它不是对象成员,在类的外部进行初始化

扫描二维码关注公众号,回复: 2566942 查看本文章

int Test::m_c = 10; 必须在外部进行初始化

调用方式:Test::count   或 s.count

7.静态成员函数:静态成员函数数冠以关键字static
静态成员函数提供不依赖于类数据结构的共同操作,它没有this指针
在类外调用静态成员函数用 “类名 :: ”作限定词,或通过对象调用
疑难问题:静态成员函数中,不能使用普通变量,只能使用静态成员变量

static只在声明函数时写

只可访问静态成员变量,不能访问普通变量

8.类的大小为成员变量所占空间(栈或堆)

成员变量:
普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式
静态成员变量:存储于全局数据区中
成员函数:存储于代码段中。

所以对象共享成员函数

成员变量:
普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式
静态成员变量:存储于全局数据区中
成员函数:存储于代码段中。

不同对象虽然访问同一个函数,但是根据this指针的不同,其传入的地址参数也不同,所以同一个函数会调用不同的成员变量

9.const修饰的函数不能修改变量, void print()  const

const void print() 与void const print()相同,返回值readonly

函数定义时,末尾也要加const

猜你喜欢

转载自blog.csdn.net/cb673335723/article/details/81191445