C++学习摘要4

本文深入探讨了C++中的复合类型,包括结构体(struct)、共用体(union)和枚举(enum)的定义与使用,并讲解了这些类型的特点与区别。此外,还介绍了类的基本概念、const的使用及注意事项等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第九章 Struct和其他复合类型

学习要点

  • 结构体(struct)的声明与定义
    结构体声明后并不直接分配内存,只是说明该结构体有哪些成员类型组成。当程序定义该结构体类型的变量时才分配存储空间。
#include<iostream>
using namespace std;
struct point{//结构体的定义 
    int a;
    int b;
    char c;
    char d;
};
void print(point &p){//使用引用传参提高效率 
    cout<<p.a<<p.b<<endl;
    p.a=0;
} 
int main(){
    point p1,p2;
    p1.a = 10;
    p1.b =20;
    p1.c = 'a';
    p2 = p1;
    cout<<p2.a<<"------"<<p2.b<<"------"<<p2.c<<endl;
    //内存数为结构体中成员所占的内存空间的总和,不足则补齐到四的倍数 
    cout<<"内存测试"<<sizeof(p2)<<endl;
    print(p2);
    cout<<p2.a<<endl;
} 
  • 在函数传参过程中,形参使用引用传递时,效率更高,不过会共享变量。
  • 共用体(union)的声明与定义
    公用体其作用是对于不同的数据类型使用共同的存储地址。公用体在程序运行时只有一个成员是出于活动状态。
  • 共用体的初始化及使用
    能够访问的是共用体最后一次被赋值的成员,在对一个新成员赋值后原有的成员就失去了作用。
#include<iostream>
using namespace std;
union Data{
    char c;
    int i;
    double d;
};
int main(){
    Data d;
    d.c = 'u';
    d.i=15;
    d.d = 2.33;
    //共用体中每次只有一个数据是有效的,由最后一次的初始化决定 
    cout<<"数据测试"<<d.i<<endl;
    cout<<"数据测试"<<d.d<<endl;
}
  • 结构体和共用体的差异
    结构体是数据类型的组合,所占用的内存控件等于各个成员占据的总和。共用体是不同数据类型的共用存储空间,所占据的内存空间等于最大成员占用的空间大小。

  • 枚举(enum)的定义和声明
    枚举元素作为常量,C++编译时按定义顺序对他们进行赋值为0,1,2,…。也可以在声明枚举类型时另行指定枚举元素的值。

#include<iostream>
using namespace std;
enum city{//Guangzhou的值为6,在5后面开始增加 
    Shanghai,Beijing,Nanjing,Tianjin=5,Guangzhou
};
void ff(enum city c){
    switch(c){
        case 0:
            cout<<"Shanghai"<<endl;
            break;
        case 1:
            cout<<"Beijing"<<endl;
            break;
        case 2:
            cout<<"Nanjing"<<endl;
            break;
        case 5:
            cout<<"Tianjin"<<endl;
            break;
        case 6:
            cout<<"Guangzhou"<<endl;
            break;
        default:
            cout<<"查无此城"<<endl;
            break;
    }
}
int main(){
    enum city c1,c2,c3,c4;
    int i=7;
    c1 = (enum city)i;
    c2 = Nanjing;
    c3 = (enum city)5;
    ff(c1);
    ff(c2);
    ff(c3);
}

疑难解惑

  • C和C++中的结构体有什么差别
    C++中的结构体可以含有成员函数

  • C++中共用体有什么特点
    1.共用体的目的是希望同一个内存断存放几种不同类型的数据,但同一时间段只能有一个。
    2.能够访问的只有最后一次赋值的成员
    3.共用体变量的地址和其他各成员的地址都是同一地址
    4.不能对共用体变量名赋值,不能企图引用变量名来得到一个值,不能在定义变量时进行初始化,不能用共用体变量名作为函数参数。


第十章 类

学习要点

  • 类的概念及定义
    类可以看成广义的数据类型,类包含数据和对数据进行操作的函数。
    类中的成员函数可以在类外实现,也可以在类内直接实现。

  • 类和对象。类是抽象,不占内存,对象是具体,占用内存。

  • 嵌套类,(java中的内部类)隐藏底层实现的作用。
  • const使用及注意点
    1.const变量不能修改数据,const指针不能改变指向。
    2.const修饰函数参数,函数中不能改变这个参数
    3.const修饰成员函数,不能调用非const成员函数。const成员函数不能更改数据
#include<iostream>
using namespace std;
int main(){
    //const测试
    int a = 5;
    int a2 = 10;
    //普通常量变量不能改变 
    const int b =10;
    //b++;

    //指定a为常类型,变量可以改变指向,但不可以更改a中的数据 
    const int * ca = &a;
    ca = &a2;
    //(*ca)++;数据不能更改,否则报错 
    //cout<<*ca<<endl;

    //常指针,不能更改指向,可以更改数据 
    int * const ca2 = &a2;
    (*ca2)++;
    cout<<a2<<endl;
    //ca2 = &a;不能更改指向 

    int const * const a6 = &a1;   ///const data,const pointer
    const int * const a7 = &a1;   ///const data,const pointer

}

更多const及注意点参见

  • 类的访问权限,私有,保护,公有
  • 静态成员
    1.静态成员目的是为了实现数据共享,类的静态变量属于类,而非对象,一个类的所有对象共用同一个类的静态变量。
    2.静态成员的初始化在类外进行。

  • 静态成员函数,类似静态成员,使用静态成员函数不需要对象。

  • 友元函数
    友元关系具有单向性,不具有交换性和传递性。友元函数并不能看作类的普通成员函数,故在实现时不用加类名限制。
#include<iostream>
#include<cstring>
using namespace std;
class Internet{
    public :
        Internet(char *name,char * address){
            strcpy(Internet::name,name);
            strcpy(Internet::address,address);
        }
        friend void ShowN(Internet &obj);
    protected:
        char name[20];
        char address[20];
};
void ShowN(Internet &obj){
    cout<<obj.name<<endl;
}
int main(){
    Internet a("新浪","www.sina.com");
    ShowN(a);
}

疑难解惑

  • C++中,const成员和const对象的区别
    1.const数据成员和const常量一样。
    2.const成员函数可以读取数据成员的值,但是不能修改,如果需要修改则可以在数据成员添加mutable修锁。
    3.const对象仅能调用const成员函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值