关于C++类的数据成员的存储类型,为什么不能是auto、register和extern

问题描述

关于C++类的数据成员的存储类型,为什么不能是auto、register和extern

C++中类的存储类型不能是register和extern可以理解,但为什么不能是auto类型的呀?在结构体中同样出错,在函数中不出错,什么情况?

 #include<iostream>
#include<cmath>
using namespace std;

class complex
{
private:
    auto double real;//编译时此处有错误illegal storage class
    double imaginary;
public:
    void initail(double r,double i)
    {
        real=r;
        imaginary=i;
    }
    double absolute()
    {
        return sqrt(real*real+imaginary*imaginary);
    }
};

int main()
{
    complex c;
    c.initail(3,4);
    cout<<"complex c's absolute value is  "<<c.absolute()<<endl;
    func();
    return 0;
}

解决方案

auto/register/extern表示的是变量的存储位置和作用域。auto变量存储在函数的堆栈空间,register存储在寄存器,extern表示这里没有新定义变量,只是扩展了一个已有全局变量的作用域。类和结构体中的变量是成员变量,其存储位置和作用域由定义对象的函数决定,不由这些对象自己决定。
例如,你定义了一个类,complex,然后你在函数main中有如下语句:

auto complex c;

这就表示c这个对象在函数堆栈中存储。那么,c中的real和imaginary自然也在堆栈中了。同时,他们的生存期也仅限于函数内部。因此,你不需要,也不能单独给对象的成员变量规定存储位置和作用域。
PS:auto/register现在已经很不常用了,并不建议再用这两个关键字。

解决方案二:

thanks for your help.

时间: 2024-09-12 02:52:29

关于C++类的数据成员的存储类型,为什么不能是auto、register和extern的相关文章

c++-请问在C++中,结构体数组类型能作为类的数据成员吗?

问题描述 请问在C++中,结构体数组类型能作为类的数据成员吗? 我想让自己构造一个结构体数组来存储记录,结构体数组类型能作为类的数据成员吗? 解决方案 just do it 解决方案二: 可以.实现的时候注意不要出错就可以. 解决方案三: 可以,c++中结构体和类除了默认访问控制符外没什么区别,一个类的对象可以作为另外一个类的成员数据,结构体当然可以 解决方案四: 可以啊,结构体不过是扩展了的int float等等 解决方案五: 当然可以不过我觉得你还不如重新写个class作为专门存储数据 解决

C++类静态数据成员与类静态成员函数

在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数. 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态)的,但是我们为了简化代码,使要说明的问题更为直观,更容易理解,我们在此处都设

c c++编程-c++关于静态数据成员的问题,看以下程序,会输出什么数字,过程是什么

问题描述 c++关于静态数据成员的问题,看以下程序,会输出什么数字,过程是什么 解决方案 打印出221 Obj obj1; //会调用构造,所以i++了(变为1了) f(); //调用函数f(),在函数内定义了一个对象,也会调用构造,i++了(变为2了),打印出第一个数字2, //打印完以后,f()函数结束了,obj2离开了作用域,调用析构i--了(变为1了) Obj *obj3 = new Obj;//会调用构造,所以i++了(变为2了) cout << obj3->getVal();

C++类中的常数据成员与静态数据成员之间的区别_C 语言

刚开始学习C++的类和对象的部分,对类中的常数据成员和静态数据成员的概念和用法经常混淆,所以今天整理一下,顺便说一下,今天是我的生日,祝我生日快乐,呵呵. 常数据成员常数据成员是指在类中定义的不能修改其值的一些数据成员,类似于我们以前学过的常变量,虽然是变量,也有自己的地址,但是一经赋初值,便不能再被修改. 适用于类中定义一些初始化之后不希望被修改的变量. 定义方法: 复制代码 代码如下: const 类型名 变量名; (1)类中的常数据成员只能通过构造函数的参数初始化表进行初始化. (2)常数

c++-文件的读写,会将类对象的数据成员写入文件中。能将文件中的信息读入类对象的对应属性中。

问题描述 文件的读写,会将类对象的数据成员写入文件中.能将文件中的信息读入类对象的对应属性中. 情况一:无get,set,无<< >>重载函数的情况下如何将类对象的各个数据成员写入某个文件中(提示:可以在print函数中写代码). 情况二:当程序包含get,set函数而无<< >>重载函数时,如何将类对象的数据成员写入文件中. 情况三:当程序包含<< >>重载函数时,如何将类对象的数据成员写入文件中. 解决方案 大神在哪里,求,求大神

c++-C++中对类的一个数据成员排序,为什么排序不了

问题描述 C++中对类的一个数据成员排序,为什么排序不了 #include #include #include #include class List; class person { public: friend class List; private: person() {next=0;} person *next; char name[10],sex[5],tel[15],ads[20],code[10],mail[20],QQ[15],category[15]; }; class List

wcf-WCF中数据契约类包含数组成员时客户端报错,怎么解决

问题描述 WCF中数据契约类包含数组成员时客户端报错,怎么解决 WCF中数据契约类包含数组成员时客户端报错,怎么办呢?这个声明为数据契约的类是当成返回值传给客户端的,当数组成员赋值为null的时候客户端能正确接收到数据,但是当给这个数组成员赋予一个数组时客户端就不能读取这个返回的数据了.有高手有类似经验吗?望不啬赐教啊,很急 解决方案 你的数组元素的类型是什么,你的详细报错信息是什么 参考https://social.microsoft.com/Forums/nl-NL/da8c4e56-0a5

C++ 类,如何用类似字符串的东西定义一个数据成员?

问题描述 C++ 类,如何用类似字符串的东西定义一个数据成员? 题目:设计一个书类,能够保存书名.定价,所有书的本数和总价. 为了实现这一要求,可以将书名.定价设计为普通数据成员,将书的本数和总价设计为静态数据成员.(如何实现题目中的书名?) 如: class book{ public: book()//构造函数,怎样定义一个名字 void show()://cout名字 private: //怎样定义一个名字 } void main{ book a();//对象a,输入一个名字: } 求各位赐

【求助】派生类中的函数访问基类同名数据成员的问题

问题描述 /*2008年5月20日14:28:54派生类中的函数访问基类同名数据成员的问题*/usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace继承_同名覆盖问题{classProgram{classA{publicinta=10;}classB:A{newpublicinta=2;//B类的a"覆盖"了基类的apublicvoidf(){Console.WriteLine(a);//请问如何在本