标题:[求助]关于C++.NET定义新对象
取消只看楼主
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
结帖率:98.25%
 问题点数:0 回复次数:3 
[求助]关于C++.NET定义新对象
我看书的时候发现书上总是把新对象定义成指针型:class1 *a = new class1();
我自己在编写时曾经写过:class1 a = new class1(); 但是会报错,提示缺少" * ",我记得在VC++中是可以这样定义的,不知道这是为什么?
搜索更多相关主题的帖子: NET 定义 对象 
2005-11-23 09:08
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:0 

//SavingsAccount.h

#pragma once

#using <mscorlib.dll>

using namespace System;

//银行存款小程序。
public __gc class SavingsAccount
{
private:
double savingsBalance; //储户存储的总金额。
static double annualInterestRate; //利率。

public:
SavingsAccount(double savings)
{
if(savings >= 0)
savingsBalance = savings;
else
savingsBalance = 0.0;
}
//~SavingsAccount();

__property double get_Savings()
{
savingsBalance = savingsBalance + savingsBalance * annualInterestRate / 12;
return savingsBalance;
}
__property static void set_Annual(double annual)
{
annualInterestRate = annual;
}
__property static double get_Annual()
{
return annualInterestRate;
}
void PrintSavingsBalance()
{
Console::Write(S"Savings Balance is : ");
Console::WriteLine(savingsBalance);
}
};


//SavingsAccount.cpp

// 这是使用应用程序向导生成的 VC++
// 应用程序项目的主项目文件。

#include "stdafx.h"
#include "SavingsAccount.h"

#using <mscorlib.dll>

using namespace System;

int _tmain()
{
SavingsAccount *save1 = new SavingsAccount(2000);
save1->set_Annual(0.04);
save1->get_Savings();
save1->PrintSavingsBalance();

SavingsAccount *save2 = new SavingsAccount(3000);
save2->set_Annual(0.05);
save2->get_Savings();
save2->PrintSavingsBalance();

return 0;
}

这样是没有错误的,但是把save1和save2前面的*去掉就会出错,请大侠们帮我解释一下,我先谢谢了。
在线等


本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2005-11-23 09:37
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:0 

//SavingsAccount.h

#pragma once

#using <mscorlib.dll>

using namespace System;

public class SavingsAccount
{
private:
double savingsBalance;
public:
SavingsAccount(double savings)
{
if(savings >= 0)
savingsBalance = savings;
else
savingsBalance = 0.0;
}
};


//SavingsAccount.cpp

#include "stdafx.h"
#include "SavingsAccount.h"

#using <mscorlib.dll>

using namespace System;

int _tmain()
{
SavingsAccount save1 = SavingsAccount(2000);
return 0;
}
我曾经把程序改写成这样,但是还是会报错:
e:\LianXi\SavingsAccount\SavingsAccount.h(10): error C3381: “SavingsAccount” : 程序集访问说明符只能应用于托管类型

难道在Visual C++.NET中只能将新的对象定义成指针型?


本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2005-11-24 09:07
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:0 
为什么这么久才有一个人回。
我自己弄明白了,托管类型的限制:
虽然托管类型的外观形式和行为和非托管类型十分类似,但公共语言运行库对托管类型施加了一些限制。
GC 类型不能进行全局或局部实例化。必须使用 new 运算符在托管堆上创建它们。
所以必须用new来创建新对象,所以必须是指针类型。
谢谢zzz822163回复

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2005-11-24 14:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-34787-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029410 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved