如何在C++中获得完整的类型名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C++中获得完整的类型名称相关的知识,希望对你有一定的参考价值。

二楼说的只能在类模板中才能用。

我尝试过这种方法,先声明一个基类,其他类在其基础上进行派生:

class CCtrlBase

public:
// Constructor/Deconstructor
CCtrlBase(CCtrlBase *ptr=NULL);         // 构建函数的ptr用于填写其派生类的对象指针,从而允许反向调用和访问
virtual ~CCtrlBase();

// Attributes
// 下列变量由基类和派生类的构建函数设置,用于为每个对象的信息维护提供支持
// 由对象的构建函数自动调用基类构建函数设置或其管理对象调用本对象的SetCallBack
private:
CCtrlBase          *pParent;            // 管理本对象的对象的指针,由维护或管理该对象的对象在创建此对象时设置

protected:
static bool bRunOnce    ;
static int          m_process_id;       // 进程号,将作为CEmulator的m_object_index。
static int          m_object_num;       // 维护进程所创建的所有CCtrlBase对象总数
CLASS_ID            class_id_;          // 基类和派生类的类型标识
CString             class_name_;        // 基类和派生类的类型名
int                 m_object_index;     // 对象的索引值;对于无管理对象的独立对象该值由基类构建函数维护,否则由管理对象维护

public:

// Implementations
private:
protected:

int              GetSize(void*p);      // 根据内存指针计算临时内存分配的空间大小(bytes)。

CString          GetClassName();       // 用于获取当前对象的类名字串
CUDPSocket      *GetUDPSocketPtr();    // 根据ptrClass指针获得Node实例指针,注意ptrClass的ClassID class_id_必须是_CNode

public:
CLASS_ID  GetClassID();// 用于获取当前对象的类名属性值(枚举类型标识)
int       SetObjID();// 用于设置ptr对象的m_object_index,当ptr为NULL时,设置为自动累加的值,否则设为其派生类或管理类中的列表索引值
int       GetObjID();// 用于查询并ptr对象的m_object_index,当ptr为NULL时,返回其派生类或管理类中的m_object_index,否则返回该对象在派生类或管理类的列表索引值,实际上通过调用其派生类或管理类的该函数以获取该值。
CCtrlBase*GetParentPtr();// 返回其管理类对象的指针,即控制者指针
void      SetCallBack(CCtrlBase *ptr, bool bReplace=true);  
/*
// 调用方法:pObj->SetCallBack(this)
// 用于指定使用本对象的管理者类函数的实例对象指针。
*/

参考技术A typeid(typename).name()

c ++:如何获得余额(在银行系统中)

【中文标题】c ++:如何获得余额(在银行系统中)【英文标题】:c++:how to get balance (in banking system) 【发布时间】:2011-09-04 05:31:07 【问题描述】:

我正在做这个项目银行系统 该系统跟踪客户在银行的账户。每个帐户都有一个编号、名称和余额。系统提供以下功能:新建账户、提现、充值、关闭账户。 系统界面如下: 选择: 1- 添加新帐户 2- 提现 3- 存款 4- 获得平衡 5- 退出 当用户选择 1 时,系统会生成一个新 ID,然后要求用户输入该帐户的名称。初始余额设置为零。

 当用户选择2时,系统要求用户输入账户ID和提现金额。如果此金额大于余额,则会显示此交易因余额不足而失败的消息。如果余额足够,它会减少提取的金额。

 当用户选择 3 时。系统要求用户输入帐户 ID 和要存入的金额。系统会按此金额增加余额。

 当用户选择 4 时,系统要求用户输入账户 ID,然后打印账户名称和余额。

 每完成一项任务,系统就会返回上面的主菜单,直到用户选择 5。

# include <iostream>
#include <string>
using namespace std;
# include<iomanip>

class Bank

private:
    char name;
    int acno;
    float balance;
public:
    void newAccount();
    void withdraw();
    void deposit();
    void getbalance();
    void disp_det();
    ;
//member functions of bank class
void Bank::newAccount()

cout<<"New Account";
cout<<"Enter the Name of the depositor : ";
cin>>name;
cout<<"Enter the Account Number : ";
cin>>acno;
cout<<"Enter the Amount to Deposit : ";
cin >>balance;

void Bank::deposit()

float more;
cout <<"Depositing";
cout<<"Enter the amount to deposit : ";
cin>>more;
balance+=more;

void Bank::withdraw()

float amt;
cout<<"Withdrwal";
cout<<"Enter the amount to withdraw : ";
cin>>amt;
balance-=amt;

void Bank::disp_det()

cout<<"Account Details";
cout<<"Name of the depositor : "<<name<<endl;
cout<<"Account Number        : "<<acno<<endl;
cout<<"Balance               : $"<<balance<<endl;

// main function , exectution starts here
void main(void)

Bank obj;
int choice  =1;
while (choice != 5 )

cout<<"Enter \n 1- to create new account \n 2- Withdraw\n 3- Deposit \n 4- get balance\n 5 Exit"<<endl;
cin>>choice;
switch(choice)

    case '1' :obj.newAccount();
        break;
    case '2' :obj.withdraw();
        break;
    case 3: obj.deposit();
        break;
    case 4: getbalance();
        break;
    case 5: 
        break;
    default: cout<<"Illegal Option"<<endl;




【问题讨论】:

请格式化您的问题并具体说明您需要什么。 在switch语句的最后,当我想得到余额时,它变成了一个错误!案例4:getbalance();休息; 【参考方案1】:

在第 4 种情况下,您应该致电 obj.getbalance()。它还没有写出来:看起来你写了一个disp_det(),而不是显示平衡。尝试重命名。

【讨论】:

【参考方案2】:

问题 1: 您在方法中输入了一个拼写错误,可以让您获得余额和您正在调用的那个,将 Bank::disp_det() 重命名为 Bank::getbalance()

void Bank::getbalance()

    cout<<"Account Details";
    cout<<"Name of the depositor : "<<name<<endl;
    cout<<"Account Number        : "<<acno<<endl;
    cout<<"Balance               : $"<<balance<<endl;

问题 2: 你不是通过Bank的对象调用Bank::getbalance,因为它是一个成员函数,你应该这样调用它:

case 4: 
     obj.getbalance();
     break;

【讨论】:

@roody: 对你有好处 :) 你应该考虑将答案标记为已接受,当然是帮助你​​解决问题的答案。【参考方案3】:

这并不完全符合您的要求,因为案例标签有不同的类型:

switch(choice)

    case '1' :obj.newAccount();
        break;
    case '2' :obj.withdraw();
        break;
    case 3: obj.deposit();
        break;
    case 4: getbalance();
        break;
    case 5: 
        break;
    default: cout<<"Illegal Option"<<endl;

要选择选项'1''2',用户将在选择是int时输入31和32。

【讨论】:

以上是关于如何在C++中获得完整的类型名称的主要内容,如果未能解决你的问题,请参考以下文章

在 django 映射中如何获得完整的选择字段计数

如何获取完整的时区名称 ios

c ++:如何获得余额(在银行系统中)

java 如何获得磁盘名称

如何获取对象的完整类型名称

C++:如何防止私有名称污染派生类型?