C++ note

| 分类 programming  | 标签 C++ 

C++强制转换

operator<type>(data)

  • static_cast 简单类型转换,int,float间转换
  • reinterpret_cast 在不改变实际数据的情况下改变数据的类型,初学者不易使用
  • const_cast 把一个const类型的常量转换成一个非常量值,还可以转volatile的值为一个非volatile的值
  • dynamic_cast 与类搭配使用

虚函数

处理未知类型的对象的方法。

virtual void func()

纯虚函数(抽象函数)

virtual void func() = 0;

多继承里的虚继承

C++虚函数表解析 C++对象的内存布局上 C++对象的内存布局下

声明成员函数为const的

template<class T> class Vector { public: int length(); int length(int n); // ... } template<class T> int pad_length(const Vector<T>& v, int n) { int k = v.length(); // oops! return k>n?k : n; } 除非对length的声明中出现了const,否则标了oops!的行将不会编译通过,因为v是const引用的。 > 如果参数是const类型的,调用的函数也必须是const的??

复制函数

虚复制函数

操作系统

子进程是父进程的一个副本,它们的程序计数器具有相同的值,所以在调用fork之后两个进程将要招待的下一条语句都是一样的。

int pid = fork() fork会返回两个值,把新创建的子进程的id返回给父进程,给新创建的子进程返回0(在子进程被存储在亦是pid中)。 如果fork函数调用失败,仅给父进程返回-1,并且不创建子进程。

子进程被创建为有自己的地址空间的父进程的一个副本,也就是存储进程执行所辅导书v人所有数据和信息的一个单独的内存区域。所以改变 子进程中的变量不会影响父进程中的相应的变量值,反之亦然,因为每个进程都有自己的地址空间。

进程间通信和管道

Basic

数组参数,用数组作为形参既不是传值调用也不是引用调用。

void fill(int a[], int size)
{
    for(int i = 0; i < size; i++)
        cin>>a[i];
}

int arr[5], num = 5;
fill(arr, num);
  • 形参a[]的方括号里没有索引表达式,就算在数组参数的方括号中填入一个数字,编译器还是会忽略这个数不计
  • 函数调用中给出的实参其后即没有方括号也没有索引表达式。

一个数组包含三部分:第一个索引变量的地址,数组的基本类型,数组大小。


上一篇     下一篇