类的数据成员可以在类的定义中直接定义吗?该如何解决
类的数据成员可以在类的定义中直接定义吗?
class ABC
{
public:
............
private:
int a=1;
int b=2;
int c=3;
}
这样定义可不可以?
因为我看到书上写类的静态数据成员不能直接在类中定义,是不是普通的数据成员也不可以?只要涉及到内存分配?
------解决方案--------------------
这个不行,私有成员的赋值只能交给成员变量来执行
------解决方案--------------------
不可以,类的思想是提供一种抽象,一种模型,如果这样直接赋值,那抽象的程度就大大降低了,不符合面向对象的理念了
------解决方案--------------------
补充一下上面说的:
通常类的设计,数据成员是类的属性;函数接口是类的方法;类的属性会随着对象的不同而各有差异,如果属性固定(也就是值一定),不利于描述对象的整体,而且这
样的对象通常可以进行更高层次的抽象
------解决方案--------------------
不可以
静态成员变量是属于类层次的数据,整个类声明周期内都是由一个实体
不管对象有多少个
普通的数据成员是属于对象层次的数据,每个对象都有自己的一份数据。
只有静态const成员变量才会直接赋值。
------解决方案--------------------
我的认为是这样的,不知道对不对,
你声明一个类
比如说这样
class test
{
public:
int data1;
int data2;
int data3;
........
}
只是告诉编译器这类test 只是一种对内存的管理形势,而并没有真正的给其分配空间,对没有实例化(也就是没有分配内存)的东西怎么能赋值呢??
不知道这样理解对不对。。。。。。。。。。
------解决方案--------------------
楼上的,我觉的我说的才是对的,你门只是从书上或者这样去想,但没有考虑到编译器,所以lz的分应该给我,我没分了,就没法在这发帖问问题了,以前在这问个问题我都给20分,现在我开帖直敢给一分(没钱了)
------解决方案--------------------
这样做实际上就让面向对象的概念大大减弱了.
私有数据成员依赖与某个特定对象.
如果一个类的所有对象的数据成员都一样,
意义就不大了.
ABC():a(1),b(2),c(3){}
这么写是可以的啊.
------解决方案--------------------
当然可以,
当他实例化后,才会为其对象配置内存,(调用你写的构造函数)初时化数据。
------解决方案--------------------
不可以,
只有产生类的实例(对象)以后才分配内存空间,
此时才能初始化数据成员.
------解决方案--------------------
打个比方,
只有开了房间,你才能住进去.
-_-
class ABC
{
public:
............
private:
int a=1;
int b=2;
int c=3;
}
这样定义可不可以?
因为我看到书上写类的静态数据成员不能直接在类中定义,是不是普通的数据成员也不可以?只要涉及到内存分配?
------解决方案--------------------
这个不行,私有成员的赋值只能交给成员变量来执行
------解决方案--------------------
不可以,类的思想是提供一种抽象,一种模型,如果这样直接赋值,那抽象的程度就大大降低了,不符合面向对象的理念了
------解决方案--------------------
补充一下上面说的:
通常类的设计,数据成员是类的属性;函数接口是类的方法;类的属性会随着对象的不同而各有差异,如果属性固定(也就是值一定),不利于描述对象的整体,而且这
样的对象通常可以进行更高层次的抽象
------解决方案--------------------
不可以
静态成员变量是属于类层次的数据,整个类声明周期内都是由一个实体
不管对象有多少个
普通的数据成员是属于对象层次的数据,每个对象都有自己的一份数据。
只有静态const成员变量才会直接赋值。
------解决方案--------------------
我的认为是这样的,不知道对不对,
你声明一个类
比如说这样
class test
{
public:
int data1;
int data2;
int data3;
........
}
只是告诉编译器这类test 只是一种对内存的管理形势,而并没有真正的给其分配空间,对没有实例化(也就是没有分配内存)的东西怎么能赋值呢??
不知道这样理解对不对。。。。。。。。。。
------解决方案--------------------
楼上的,我觉的我说的才是对的,你门只是从书上或者这样去想,但没有考虑到编译器,所以lz的分应该给我,我没分了,就没法在这发帖问问题了,以前在这问个问题我都给20分,现在我开帖直敢给一分(没钱了)
------解决方案--------------------
这样做实际上就让面向对象的概念大大减弱了.
私有数据成员依赖与某个特定对象.
如果一个类的所有对象的数据成员都一样,
意义就不大了.
ABC():a(1),b(2),c(3){}
这么写是可以的啊.
------解决方案--------------------
当然可以,
当他实例化后,才会为其对象配置内存,(调用你写的构造函数)初时化数据。
------解决方案--------------------
不可以,
只有产生类的实例(对象)以后才分配内存空间,
此时才能初始化数据成员.
------解决方案--------------------
打个比方,
只有开了房间,你才能住进去.
-_-