::和->在C++的含义

本文深入解析C++中的作用域概念,包括全局作用域、类作用域及命名空间作用域,同时阐述了作用域解析运算符::的用法。此外,还详细解释了指针指向运算符->的用途及其与结构体结合的实例,以及<<和>>运算符在序列化过程中的重载应用。
表示作用域,和所属关系
比如
class A
{
  public:
    int test();
}

int A::test()//表示test是属于A的
{
 return 0;
}

类似的还有其他,就不列举了
--------------------
比如
int a;

void test ()
{
  int a = ::a;//用全局变量a,给本地变量a赋值
}

:: 是运算符中等级最高的,它分为三种:
1)global scope(全局作用域符),用法(::name)
2)class scope(类作用域符),用法(class::name)
3)namespace scope(命名空间作用域符),用法(namespace::name)
他们都是左关联(left-associativity)
他们的作用都是为了更明确的调用你想要的变量,如在程序中的某一处你想调用全局变量a,那么就写成::a,如果想调用class A中的成员变量a,那么就写成A::a,另外一个如果想调用namespace std中的cout成员,你就写成std::cout(相当于using namespace
std;cout)意思是在这里我想用cout对象是命名空间std中的cout(即就是标准库里边的cout)
他们算是C++中的基础,如果运用的好的话,你程序的出错率也许会降很多,

 

c++中 -> 是什么意思,如何使用

在程序中多次出现如下代码:

memory->destroy (BOP_index);
memory->create (BOP_index,nall,"BOP_index");

还有

int *tag = atom->tag;
int timestep = update->ntimestep;
int newton_pair = force->newton_pair;

很困惑->在这里是什么意思,有什么作用,请高手解答

 

->是指针的指向运算符,通常与结构体一起使用。

具体使用方法可以参考如下程序:

#include<stdio.h>
struct stu   // 定义一个结构体
{
    char name[10];  // 姓名
    int num;  // 学号
    int age;  // 年龄
};
void main()
{
    struct stu *s;   // 定义一个结构体指针
    char str[]="ZhangLi";
    s->name = str;     // 对结构体中的成员变量name进行赋值
    s->num = 2015120;  // 对结构体中的成员变量num进行赋值
    s->age = 18;       // 对结构体中的成员变量age进行赋值
}

 

初学MFC,一个符号的疑惑
 

void CScribDoc::Serialize(CArchive& ar)
{
  if (ar.IsStoring())
    ar << m_sizeDoc;
  else
    ar >> m_sizeDoc;
m_graphList.Serialize(ar);
}

如上面的函数,“<<” 和 ">>",这两个符号在c++里不是输入输出用的么,这里又是什么意思呢?迷惑..
------解决方案--------------------
你可以把它看做是数据流的写入和写出,这只有在数据的序列化中这么使用
------解决方案--------------------
CArchive类重载了operator << 和operator <<操作符
------解决方案--------------------
对的,<< 和 >> 本是 C++ 里面的 插入操作符 和 提取操作符 。
插入操作符 << 的作用是将它后面的内容插入到标准输出流中以便输出,而提取操作符 >> 的作用是从标准输入流中提取数据并存储到它后面的变量中。
根据我的理解,
所谓输入,就是程序运行的时候,从程序的外部拿数据进来使之成为程序自己的东西;
所谓输出,就是程序运行的时候,把程序自己的数据送给外部以供外部来使用。
下面的一段 C++ 代码说明了这两个操作符的用法:

<span style="color:#000000">

#include <iostream.h>

void main()

{

    int a;

    cout<<"Please enter an integer:\n";

    cin>>a;

    cout<<"a: "<<a<<endl;

}</span>



再来说说你的这个代码:

<span style="color:#000000">void CScribDoc::Serialize(CArchive& ar)

 {

   if (ar.IsStoring()) //如果是在存储归档文件(也就是把数据存储到文档中)

     ar << m_sizeDoc; //那么就将 m_sizeDoc 变量插入输出流中。这里输出流对象是 CArchive 类的对象 ar ,并且通常情况下 ar 已经和某个特定的文档关联起来了,那么将变量插入输出流中,就是将变量的值写入文档

   else //如果当前是在读取归档文件(也就是从文档中读取数据)

     ar >> m_sizeDoc; //同上。这里输入流对象是 ar ,那么就是从 ar 中提取数据并将数据保存到 m_sizeDoc 变量中

 m_graphList.Serialize(ar); //调用 m_graphList 的 Serialize 函数

 }

</span>


------解决方案--------------------

引用:

void CScribDoc::Serialize(CArchive& ar)
{
  if (ar.IsStoring())
    ar << m_sizeDoc;
  else
    ar >> m_sizeDoc;
m_graphList.Serialize(ar);
}

如上面的函数,“<<” 和 ">>",这两个符号在c++里不是输入输出用的么,这里又是什么意思呢?迷惑..


CArchive重写了这两个操作符。
------解决方案--------------------
和cin,cout是一个意思。
------解决方案--------------------
序列号类重载了这两个操作符
------解决方案--------------------
在这里,还是输入输出的意思

<think>嗯,用户想了解编程中的符号->的用途意义。首先,我得回想一下自己知道的编程语言里哪些会用到这个符号。比如Python中的函数注解,比如lambda表达式有时也会用到?不过更常见的是在C/C++中的指针访问结构体成员,比如p->name。还有PHP里的数组定义好像也用->来访问对象的方法或属性。还有Rust中的闭包参数?或者F#这样的函数式语言中的函数定义?可能需要分语言来整理。 然后需要确认用户可能关心的点,比如不同语言中的不同用法,是否容易混淆。比如在C里是结构体指针访问成员,在Python中可能是返回值注解,PHP中是对象调用方法。用户可能遇到不同语言中的相同符号不同含义,需要明确区分。 还要注意用户提供的引用内容,里面提到了Go语言的符号分类,但->不在其中。用户给出的引用1提到了分号、括号、大括号等,但没提到->。引用3讨论的是and/or&/|的区别,可能->无关。所以主要靠自己的知识库来回答。 可能需要分点说明,比如: 1. C/C++中的指针成员访问。 2. Python中的函数返回值注解。 3. PHP中的对象方法调用。 4. 其他语言如Rust、Haskell中的可能用法。 然后每个点举例子,比如代码片段,说明具体用途。比如在C中,结构体指针用->访问成员,而普通变量用点号。Python 3.5+的函数注解中,def func() -> int: 表示返回int类型。PHP中$obj->method()。 另外,可能用户是在看某种语言的代码时遇到了->,所以需要覆盖常见的情况,避免遗漏。还要注意语法格式,比如行内数学表达式用$...$,但这里可能不需要数学符号,主要是代码示例。不过用户给的示例中代码块用了三个反引号,所以可能需要插入代码示例。 另外,用户要求生成相关问题,可能需要准备三个左右的问题,比如: 1. ->在C语言Python中的区别? 2. 如何理解PHP中->::的区别? 3. 函数返回值注解的作用是什么? 还要注意引用标识,比如在提到PHP的对象方法调用时,是否引用到已有的引用内容?但用户提供的引用中没有提到->,所以可能不需要加引用标记,或者引用到用户给的引用中的相关部分,比如引用1提到的语法符号中的点号,但->可能不在其中。所以可能回答中不需要添加引用,或者仅在必要时提及。 需要确保回答结构清晰,分语言说明,每个部分有例子,并最后生成相关问题。同时检查LaTeX格式是否正确,但这里可能用不到数学公式,主要是代码块。例如: 在C语言中: ```c struct Person { char name[20]; }; struct Person *p = malloc(sizeof(struct Person)); p->age = 30; // 使用->访问成员 ``` 在Python中: ```python def greet() -> str: return "Hello" ``` 在PHP中: ```php class MyClass { public function myMethod() { echo "Called"; } } $obj = new MyClass(); $obj->myMethod(); ``` 然后总结各个语言中的用途,确保正确性。例如,C/C++的指针访问,Python的返回注解,PHP的对象方法调用,Rust闭包的参数返回值等。 最后生成的相关问题需要->符号的不同使用场景相关,帮助用户进一步了解。</think>在编程中,符号 $ \rightarrow $ (`->`) 的用途意义因语言而异,以下是主要应用场景及示例: --- ### 一、C/C++ 中的指针成员访问 在 C/C++ 中,`->` **用于通过指针访问结构体或类的成员**。 - **普通变量**使用 `.` 访问成员,**指针变量**则通过 `->` 简化操作: ```c struct Student { int id; char name[20]; }; struct Student s1 = {1, "Alice"}; struct Student *ptr = &s1; printf("%d", ptr->id); // 等效于 (*ptr).id ``` --- ### 二、Python 中的函数返回值注解 在 Python 3.5+ 中,`->` **用于声明函数返回值的类型注解**(仅提示作用,不影响实际类型): ```python def add(a: int, b: int) -> int: return a + b ``` --- ### 三、PHP 中的对象方法调用 在 PHP 中,`->` **用于调用对象的方法或访问属性**: ```php class Car { public $color = "red"; public function start() { echo "Engine started!"; } } $myCar = new Car(); echo $myCar->color; // 访问属性 $myCar->start(); // 调用方法 ``` --- ### 四、其他语言中的用途 1. **Rust**:在闭包中分隔参数返回值: ```rust let square = |x: i32| -> i32 { x * x }; ``` 2. **Haskell**:表示函数类型签名: ```haskell add :: Int -> Int -> Int add x y = x + y ``` --- ### 关键区别总结 | 语言 | 用途 | 示例 | |-----------|--------------------------|--------------------| | C/C++ | 指针成员访问 | `ptr->member` | | Python | 函数返回值类型注解 | `def func() -> int`| | PHP | 对象方法/属性调用 | `$obj->method()` | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值