C++随笔:模板、容器、迭代器、构造函数、public

1、类其实也是一种作用域

#include<iostream>
using namespace std;
class A{
public:
    typedef int INT;
    static void show();
    void work();
};
void A::show(){ cout<<"show()"<<endl; }
void A::work(){ cout<<"work()"<<endl; }
int main(){
    A a;
    a.work();  //通过对象访问普通成员
    a.show();  //通过对象访问静态成员
    A::show();  //通过类访问静态成员
    A::INT n = 10;  //通过类访问 typedef 定义的类型 
    return 0;
}

迭代器iterator应该是容器Vector的typedef类型在这里插入图片描述
在这里插入图片描述
静态成员既可以通过对象访问,又可以通过类访问,而 typedef 定义的类型只能通过类来访问
2、结构体是否有构造函数和析构函数,C里面没有,C++里面有。
C++里根本就没有结构,仅仅为了兼容c才有结构这种东西,实际上除了名字以外,C++的结构就是类!!

3、vector其实是C++中的一个“类模板”
类模板中的成员函数并不是一开始就创建的,在调用时才去创建。

4、如果既不写 private 也不写 public,就默认为 private。
构造函数必须是 public 属性的
模板类创建对象时调用的是模板的构造函数,如下代码,Compare创建的对象是Compare类的构造函数,而不是Student类的构造函数:

#include <iostream>
using namespace std;

class Student
{
    string name;
    int age;
public:
    Student() { cout << "default construct1" << endl; }
};

typedef struct {
    int a;
    int b;
} st;

template <class T> //声明一个模板,虚拟类型名为T。注意:这里没有分号。
class Compare //类模板名为Compare
{
    public:
    Compare() { cout << "default construct2" << endl; }
    Say(T a)
    {
        cout << sizeof(a) << endl;
    }
};

int main()
{
    Student ik;
    Compare<Student> StudentObj;
    StudentObj.Say(ik);
}

编译和输出:

PS D:\gcc_gdb\cpp2\vector> g++ .\templateClass.cpp -o templateClass
PS D:\gcc_gdb\cpp2\vector> .\templateClass.exe
default construct1
default construct2
28

其实在 C++ 中,数组也是容器。数组的迭代器就是指针,而且是随机访问迭代器。例如,对于数组 int a[10],int * 类型的指针就是其迭代器。则 a、a+1、a+2 都是 a 的迭代器。

vector 容器在进行扩容后,与其相关的指针、引用以及迭代器可能会失效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值