C++快速入门4

76 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

指针与动态内存分配

T *p = new T;
delete p;
T *q = new T[n];
delete[] q;
#include<iostream>

using namespace std;

int main(){
    int n = 4;
    int *p = new int[4];
    char *c = (char *)p;
    char ch = 'A';
    int len = n * sizeof(int) / sizeof(char);
    for (int i = 0; i < len; i++){
        c[i] = ch + i;
    }
    for (char *r = c+len; c < r; c++){
        cout << *c << ' ';
    }
    delete[] p;
    return 0;
}

A B C D E F G H I J K L M N O P

一个int的内存可以被当做4个char型的用

动态申请的内存记得销毁,不然会产生内存泄漏,delete释放内存时,对于数组要加[],不然只释放了第一个内存,也会产生内存泄漏。

尽量用new和delete,而不是用malloc和free以及realloc

类和对象

对象之间通过发送/接收消息来协作完成各种任务
在C++里,struct也用来定义类,实例化时不需要加上struct,只用类名就可以

C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。
C++中的 struct 和 class 基本是通用的,唯有几个细节不同:

  • 使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。
  • class 继承默认是 private 继承,而 struct 继承默认是 public 继承(《C++继承与派生》一章会讲解继承)。
  • class 可以使用模板,而 struct 不能(《模板、字符串和异常》一章会讲解模板)。

C++ 没有抛弃C语言中的 struct 关键字,其意义就在于给C语言程序开发人员有一个归属感,并且能让C++编译器兼容以前用C语言开发出来的项目。
在编写C++代码时,我强烈建议使用 class 来定义类,而使用 struct 来定义结构体,这样做语义更加明确。

c.biancheng.net/view/2235.h…

链接中有反例

#include<iostream>

using namespace std;

struct Student
{
    string name;
    double score;
    void print(){
        cout << name + " " << score << endl;
    }
    void print2(); //函数的声明
};

void Student::print2(){ //函数实现
    cout << name + " " << score << endl;
}
int main(){
    Student s[3];
    s[0].name = "zhangsan";
    s[0].score = 90.2;
    s[0].print();
    s[1].name = "zsan";
    s[1].score = 92.2;
    s[2].name = "han";
    s[2].score = 93.2;
    Student *p = s;
    p += 1;
    cout << p->name <<endl;
    (*(p+1)).print();
    p->print2();
    return 0;
}

输出:

zhangsan 90.2
zsan
han 93.2
zsan 92.2