| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1174 人关注过本帖
标题:[求助]关于C++.NET定义新对象
只看楼主 加入收藏
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
结帖率:98.25%
收藏
 问题点数:0 回复次数:5 
[求助]关于C++.NET定义新对象
我看书的时候发现书上总是把新对象定义成指针型:class1 *a = new class1();
我自己在编写时曾经写过:class1 a = new class1(); 但是会报错,提示缺少" * ",我记得在VC++中是可以这样定义的,不知道这是为什么?
搜索更多相关主题的帖子: NET 定义 对象 
2005-11-23 09:08
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分: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
zzz822163
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2005-11-17
收藏
得分:0 

必须将托管对象声明为指针。

2005-11-23 15:37
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分: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
帖 子:8078
专家分: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
shanglangfen
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-11-22
收藏
得分:0 
你没有重载=操作哦!不能这样使用的呀SavingsAccount save1 = SavingsAccount(2000);应该这样SavingsAccount save1(2000)试试!还是NEW生成的是指针哦!不能赋值给类对象哦!
2005-11-24 14:57
快速回复:[求助]关于C++.NET定义新对象
数据加载中...
 
   



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

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