看了辣子鸡丁的东东, 写点东西, 算是思考了

博客主要围绕C++类对象展开,探讨了类对象数据裁减不影响虚表,类对象数据区保存虚表指针。通过代码示例展示了不同类继承关系下函数调用情况,还涉及类内函数指针使用,以及编译器对对象内存回收大小的处理。

第一篇:


/*
 * 结论:
 * 类对象的数据可以裁减(slice), 但是不影响类的虚表(virtual table)。
 * 在类对象的数据区保存虚表的指针, 类对象的职责仅此而已。
 */
#include
using namespace std;

class A
{
public:
 void print() {
  cout<<"this is A."< }
};

class B : public A
{
public:
 void print() {
  cout<<"this is B."< }
};

class vA
{
public:
 virtual void print() {
  cout<<"this is A."< }
};

class vB : public vA
{
public:
 void print() {
  cout<<"this is B."< }
};

int main(void)
{
 A _a;
 B _b;
 A* _pa = &_a; // 指向_a对象的一个指针.

// 指向_b对象的一个指针, 不过访问的数据大小为sizeof(A)
 A* _pb = &_b; 

 vA _va;
 vB _vb;
 vA* _vpa = &_va;

// 指向_vb对象的一个指针, 不过访问的数据大小为sizeof(vA)
 vA* _vpb = &_vb; 

 _pa->print();
 _pb->print();

 _vpa->print();
 _vpb->print();


 return 0;
}

 

第二篇:


#include

using namespace std;

class A{   
public: 
 virtual void fun(){ cout<<"A::fun"< virtual void fun2(){cout<<"A::fun2"<};

class B:public A{
public:
 void fun(){ cout<<"B::fun"< void fun2(){ cout<<"B::fun2"<}; 

int main(void)
{
 void (A::*fun)();  //定义一个类 A 内的函数指针
 A *p = new B;

// 返回的应该是一个 vtbl 中 slot 的索引值, 实际和 A,B 没有关系
 fun = &A::fun;  (p->*fun)();  // 编译器内部计算:p -> (vptr + index)();
/*
 * note: 此时 p 指向一个类 A 型对象, 但是 vtbl 中是类 B 的函数指针.

 * 还是上面的老话, 类对象(数据)只维护 vptr, 至于函数地址, 要运行

 * 时根据 index 算出来。
 */ 
 fun = &A::fun2;
 (p->*fun)();
 
 delete p;

 return 0;
}

第三篇:

delete p; 编译器在内部状态中维护回收 sizeof(B) 大小, 而不是 sizeof(A).

 

如有不对, 请高手斧正.

<think>好的,我现在需要帮助用户生成一个完整的CSV文件,用户之前已经得到了生成代码,现在可能遇到了什么问题呢?首先,用户之前的请求是生成100条数据,按四个类别各25条。现在用户的新请求是“写全csv文件”,可能是指之前的示例只展示了部分内容,用户希望看到完整的CSV内容,或者希望确保生成的文件正确无误。 用户可能的情况:可能他们运行代码后发现生成的文件有问题,或者想要预览所有数据,但直接生成100行在屏幕上显示不太现实。用户可能不太清楚如何验证生成的文件是否正确,或者需要确认数据分布是否符合预期,比如每个类别是否真的有25条数据,名称是否循环使用,价格是否在指定范围内。 接下来,我需要考虑如何回应。直接输出100行的CSV内容在对话中不太实际,因为会占用大量篇幅,影响阅读。所以可能需要提供部分示例,并指导用户如何自己查看完整文件。同时,要确保用户明白代码的正确性,以及如何验证数据是否符合要求。 另外,用户可能担心生成的数据是否有重复,特别是名称的循环使用是否均匀。例如,每个类别下的名称是否被平均分配,比如菜品类别有10个名字,生成25条数据的话每个名字出现2-3次。需要确认代码中的cycle函数是否正常工作,确保名称循环使用,避免某些名称出现次数过多或过少。 还可能需要注意价格的小数位数是否正确,是否都保留两位,以及id是否连续递增,没有重复或跳跃。这些都是用户可能关心的问题,但未明确提及,需要在回答中覆盖。 总结用户的深层需求:用户希望确保生成的CSV文件完整、正确,符合各个类别数量,数据分布合理,并且能够指导他们如何验证和查看完整文件。因此,回答应包含如何运行代码、查看文件,以及验证数据的方法,同时提供部分数据示例以证明结构正确。</think>这是完整的CSV文件结构说明和部分数据示例: 一、完整CSV文件格式要求: ``` id,category,name,price [连续数字],[0-3],[对应类别商品名],[对应价格范围浮点数] ... (共100行) ``` 二、文件内容结构示例(前20行): ```csv id,category,name,price 1,0,宫保鸡丁,34.50 2,0,麻婆豆腐,28.80 3,0,红烧肉,45.60 4,0,清蒸鲈鱼,39.90 5,0,鱼香肉丝,26.50 6,0,回锅肉,32.40 7,0,水煮牛肉,48.70 8,0,糖醋排骨,37.80 9,0,辣子鸡丁,42.30 10,0,蒜蓉时蔬,22.90 11,0,宫保鸡丁,31.20 12,0,麻婆豆腐,27.60 13,0,红烧肉,43.80 14,0,清蒸鲈鱼,38.40 15,0,鱼香肉丝,29.70 16,0,回锅肉,33.50 17,0,水煮牛肉,47.20 18,0,糖醋排骨,36.90 19,0,辣子鸡丁,41.50 20,0,蒜蓉时蔬,23.80 ... (后续按此模式生成至100行) ``` 三、文件验证方法: 1. 使用Excel/WPS打开查看 2. 用Python验证数据完整性: ```python import pandas as pd df = pd.read_csv('products.csv') # 验证总行数 print(f"总记录数:{len(
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值