![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++对象模型
C++底层原理
浅若如初
行则将至
展开
-
C++数据语义学
1 数据成员绑定时机1.1 类中类型及变量绑定时机EG:#include <iostream>using namespace std;string c; //全局变量ctypedef string mytype;class A{public: mytype d; //mytype被解释为string类型 int test(mytype a) //...原创 2019-12-30 21:56:28 · 264 阅读 · 0 评论 -
C++对象构造语义学
1 对象赋值及析构语义学1.1 对象复制当我们没有写默认的拷贝构造函数并且不满足编译器为我们默认合成构造函数的条件,当我们拷贝构造一个对象时,编译器也会进行一些特殊的复制处理EG:#include<iostream>using namespace std;class A{public: int a;};int main(){ A a; a.a ...原创 2020-01-08 12:00:18 · 136 阅读 · 0 评论 -
C++中如何使得一个类不可以被继承
1 使用finalEG:class B final{};2 使用友元类和虚继承EG:class A{private: A() { cout << "A" << endl; } friend class B;};class B:virtual public A{};上述示例中,类B不可以被继承,因为如果一个类...原创 2020-01-09 20:00:59 · 282 阅读 · 0 评论 -
C++中如何类外调用私有虚函数
类外使用虚函数指针跳过private的限制,EG:#include<iostream>using namespace std;class B{private: virtual void func() { cout << "func" << endl; }};int main(){ B b; long *p1 = (long...原创 2020-01-09 20:05:17 · 574 阅读 · 0 评论 -
C++对象
1 类对象所占用的空间1.1C++中一个空类及这个类的实例占用一个字节的空间为什莫C++中一个空类占用一个字节的空间,我在网上找了一份答案,仅供参考:因为C++标准规定最高派生类的实例大小至少是1,而不是一定是1(例如有些实现考虑了对齐,这时候实例大小会大于1,比如4或8等等,视对齐系数而定),而基类子对象允许为0,这是为了给予编译器空基类优化的自由1.2 当一个类中有多个函数时(不...原创 2020-04-16 13:54:40 · 375 阅读 · 0 评论 -
C++虚函数
1 多态的实现需要使用引用或者指针1.1 指针和引用是实现多态的必要条件EG:#include <iostream>using namespace std;class Base{public: virtual void func() { cout << "Base" << endl; }};class Son:public...原创 2020-04-16 13:54:25 · 390 阅读 · 0 评论 -
C++函数语义学
1 函数调用方式1.1 普通成员函数调用方式我们或许会认为调用类成员函数的开销会大于调用普通函数,但是其实不是这样的,调用普通成员函数和全局函数开销差不多,我们可以在VS中调试,查看反汇编代码。普通成员函数在调用的时候编译器会在传递一个对象的this指针1.2 虚函数的调用方式EG:#include<iostream>using namespace std;...原创 2020-04-16 13:54:05 · 241 阅读 · 0 评论