C++知识点

  1. 声明为const 的数据成员不能出现任何可能改变成员的操作,如:
  • 常成员函数不能出现赋值语句不能调用非常成员函数。
  • 常对象只能调用常成员函数。
  • 类的常成员变量在构造函数中只能通过列表初始化的方式。
  1. 虚函数重新定义,函数返回类型,函数名,参数个数,参数类型,参数顺兴都必须与原函数一致。
  2. 函数重载,只有参数类型不同,或者参数个数不同,或者二者兼有,才能重载,返回值类型不算。
  3. 赋值兼容规则成立条件是派生类从其基类公有派生。
  4. 只有通过基类指针访问虚函数才是动态连编,获得运行时的多态。
  5. 内联函数不能是虚函数,虚函数在类内定义,编译时仍将其看做非内联的。
  6. 构造函数不可以为虚函数,析构函数通常为虚函数。因为如果new一个派生类的无名对象赋值给基类的一个指针,当用delete运算符撤销无名对象时,系统只能执行基类的析构函数,而不能执行派生类的析构函数
  7. 纯虚函数:virtual void show()=0;
  8. 拥有一个或多个纯虚函数的类为抽象类,抽象类不可以声明对象,可以声明指针和引用
  9. 编译时的多态通过 重载 模板 实现,运行时的多态通过 虚函数实现。
  10. reinterpret_cast用在任意指针(或引用)类型之间的转换;以及指针与足够大的整数类型之间的转换;从整数类型(包括枚举类型)到指针类型,无视大小。(相同bit位)
char str[] = "glad to test something";
char *p = str;
p++;
int *p1 = reinterpret_cast<int *>(p);
p1++;
p = reinterpret_cast<char *>(p1);
printf("result is %s\n", p);//result is to test something
class CTest
    {
        public:
            CTest():m_chData(‘\0’),m_nData(0){        }
            virtual void mem_fun() {}    private:
        
        char m_chData;
        int m_nData;
        static char s_chData;
    };
 char CTest::s_chData=’\0’;

32位操作系统
(1)若按4字节对齐sizeof(CTest)的值是多少? 12
(2)若按1字节对齐sizeof(CTest)的值是多少? 4
类占的内存空间:

  • 空类占一个字节
  • 非空类计算包括:变量,虚函数创建的虚表指针 。static不算,也没有空类占用的那一个字节。

方法重载(overload):

  • 必须是同一个类
  • 方法名(也可以叫函数)一样
  • 参数类型不一样或参数数量不一样
    方法的重写(override)两同两小一大原则:
  • 方法名相同,参数类型相同
  • 子类返回类型小于等于父类方法返回类型,
  • 子类抛出异常小于等于父类方法抛出异常,
  • 子类访问权限大于等于父类方法访问权限
    char a[]={0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8};
    short* st=(short*) a;
    int* it=(int *) a;
    long long* ll=(long long *) a;
    printf("%x\n%x\n%x\n", *st, *it, *ll);

这个代码的输出应该是?

答案是:
201
4030201
4030201

首先解释short, short占两个字节,所以指针指向两个字节,但是可能就好奇为什么是201不是102
这就涉及汇编字的传送 , 看下面这个汇编代码
在这里插入图片描述

如果0x1在10000H, 那么0x2在10001H, 所以0x2在高八位,0x1在低八位,即0000 0010 0000 0001 ,所以为201
int 同理,但是不明白long long 只取4位?还请高手赐教。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值