类成员变量初始化专题

1. C++变量的初始化方式

首先把需要初始化的成员变量分为几类:

Ø  一般变量(int)

Ø  静态成员变量(static int)

Ø  常量(const int )

Ø  静态常量(static const int)

 对应的初始化方式是:

Ÿ  一般变量可以在初始化列表里或者构造函数里初始化不能直接初始化或者类外初始化

Ÿ  静态成员变量必须在类外初始化

Ÿ  常量必须在初始化列表里初始化

Ÿ  静态常量必须只能在定义的时候初始化(定义时直接初始化)

 

举一个简单的例子

#include <iostream> 
#include <string> 
using namespace std; 
class Test 
{ 
private: 
    int a; 
    static int b; 
    const int c; 
    static const int d=4; 
public: 
    Test():c(3)     //a(1)或者在初始化列表里初始化 
    { 
        a=1; 
    } 
}; 
int Test::b=2;
void main() 
{ 
    Test t; 
}

 

 

2. 类成员变量初始化顺序

C++

有如下几条:

1构造函数初始化列表的变量优先于构造函数(至少明显的写在前面)  (若都在初始化列表中初始化,则按声明顺序初始化,与初始化列表中的顺序无关)

2静态成员变量先于实例变量

3父类成员变量先于子类成员变量

4父类构造函数先于子类构造函数

 举一个例子:

#include <iostream>
#include <string>
using namespace std;
class Test
{
public:
	Test(string n)
	{
		cout<<n<<endl;
	}
};
class Base
{
public:
	static Test* a;
	Test* b;
	Test* c;
	Base():b(new Test("b"))
	{
		c=new Test("c");
	}
	virtual ~Base()
	{
		if(a) delete a;//似乎是很欠妥的做法
		if(b) delete b;
		if(c) delete c;
	}
};
Test* Base::a=new Test("a");
class Derived:Base
{
public:
	static Test* da;
	Test* db;
	Test* dc;
	Derived():db(new Test("db"))
	{
		dc=new Test("dc");
	}
	~Derived()
	{
		if(da) delete da;//似乎是很欠妥的做法
		if(db) delete db;
		if(dc) delete dc;
	}
};
Test* Derived::da=new Test("da");

void main()
{
	Derived d;
}

结果是:

a
da

b

c

db

dc


 

java和C#语言

1   类成员变量初始化先于类的构造函数

2   静态成员变量先于实例变量

3   父类成员变量先于子类成员变量 (C#相反)

4   父类构造函数先于子类构造函数

举一个java的例子:

class Base
{
	public static Test a=new Test("a");
	public static Test b;
	public Test c=new Test("c");
	public Test d;
	static
	{
		b=new Test("b");
	}
	public Base()
	{
		d=new Test("d");
	}
	public static void main(String[] args) {
		new Derived();
	}
}
class Derived extends Base
{
	public static Test da=new Test("da");
	public static Test db;
	public Test dc=new Test("dc");
	public Test dd;
	static
	{
		db=new Test("db");
	}
	public Derived()
	{
		dd=new Test("dd");
	}
}

class Test
{
	public Test (String name) {
		System.out.println(name);
	}
}

运行结果是:

a

b

da

db

c

d

dc

dd



  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Python中,成员变量可以在初始化方法中进行初始化初始化方法是一个特殊的方法,用来定义具有哪些属性。在Python中,初始化方法的名称是`__init__`。初始化方法在创建对象时会被直接调用。通过在初始化方法中使用`self.属性名=属性的初始值`的方式来定义属性。 下面是一个示例代码,演示了如何在Python中进行成员变量初始化: ```python class Cat(): def __init__(self): self.name = "Tom" tom = Cat() print(tom.name) # 输出结果为 "Tom" ``` 在上述代码中,`Cat`定义了一个初始化方法`__init__`,在方法内部使用`self.name = "Tom"`给属性`name`赋予了初始值。然后通过创建`Cat`对象`tom`,可以通过`tom.name`来访问和使用这个成员变量。 另外,如果希望在创建对象的同时,就设置对象的属性,可以对初始化方法进行改造。可以把希望设置的属性值定义成初始化方法的参数,在方法内部使用`self.属性 = 形参`的方式来接收外部传递的参数。 下面是一个改造后的示例代码: ```python class Cat(): def __init__(self, name): self.name = name def shout(self): print("%s 喵喵叫" % self.name) tom = Cat("Tom") print(tom.name) # 输出结果为 "Tom" ``` 在上述代码中,`Cat`初始化方法接收一个`name`参数,并通过`self.name = name`来将参数值赋给成员变量`name`。创建`Cat`对象`tom`时,可以通过传递参数`"Tom"`来设置`name`属性的初始值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值