本帖最后由 鸦领主 于 2021-1-25 15:19 编辑
1.用对象或引用的区别
a)对象做参数,会在被调函数中进行数据复制,浪费数据复制的时间
b)引用或指针做参数,不会在被调函数中进行数据复制(只有一个4个字节的指针变量)
c)对象做返回值,会在主调函数进行隐含的数据复制,浪费数据复制的时间
d)引用或指针做返回值,不会进行数据复制(只有一个4个字节存在eax寄存器里面)
2.做左值的函数
a)几乎所有的c语言函数都不能做=符号的左值
b)函数的返回值是指针类型时,可以使用*符号之后做左值
c)函数的返回值是结构体指针时,可以使用->等符号做左值
d)函数的返回值是引用类时,可以直接做左值
列如:
Data &GetAt(POSITION p)//此时返回值是引用,那么说明可以直接做左值
{
return ((SNode*)p)->data;//但是使用要转换一下
}
GetAt(p)=new1;//将p指向的地址的数据的内容替换成新的数据
static关键字的用法
1.static局部变量的特点
a)地址在全局区
b)感觉只有第一次进入函数时初始化)实际上在还进入main函数以前就初始化了
c)生命期在离开main函数以后结束
d)每次进入函数时不重新初始化,保留进入函数之前的数值
2.static成员变量的用法:
a)当类内的变量前加上static关键字,就是静态成员变量;
b静态成员变量的地址在全局区,是全局性质的变量;
c)只是名义上划归为某个类内,但是该类的空间不包括静态成员变量
d)调用放法可以用对象或this指针,也可以直接指定类名加定义域去调用;
e)静态成员变量一般定义公有,踉对象是无关的;
3.static成员函数:
a)一个成员函数如果前面加上static关键字就是全局函数的性质;
b只是名义上划归为莫个类内,函教内没有this指针的形式参数,
c)静态成员函数内不可以通过this指针调用本类的成员(函数和变量)。
二、stdlist类的用法
#include<list>
#include<iostream>
using namespace std;
int main()
{
list<int> list1;
list1.push_back(11);//push_back相当于CList中的AddTail
list1.push_back(77);
list1.push_back(66);
list1.push_back(45);
list<int>::iterator p = list1.begin();//begin()相当于CList中的GetHeadPosition
//list<int>::iterator这个应该是类对象(迭代器)
while (p!=list1.end())//这个链表是环形的,有一个额外的节点,头部和尾部连接着额外的节点,end就代表这个节点
{
cout << *p << endl;//CList中是用GetAt()
p++;
}
return 0;
}
详细参考:https://docs.microsoft.com/zh-cn/cpp/standard-library/list-class?f1url=%3FappId%3DDev16IDEF1%26l%3DZH-CN%26k%3Dk(LIST%252Fstd%253A%253Alist)%3Bk(std%253A%253Alist)%3Bk(list)%3Bk(DevLang-C%252B%252B)%3Bk(TargetOS-Windows)%26rd%3Dtrue&view=msvc-160#rbegin
|