这是用c ++调用函数的正确方法吗?

Suj*_*ran 0 c++

Time t (12, 0, 0); t.GetTime();

Time* t = new Time(12, 0, 0); t->GetTime();
Run Code Online (Sandbox Code Playgroud)

这是使用没有new关键字和新关键字创建的对象来调用方法的正确方法吗?谢谢..

Dav*_*nan 10

摘录1

Time t (12, 0, 0); 
Run Code Online (Sandbox Code Playgroud)

由于t是类型的结构或类Time,因此可以使用.运算符访问其成员,称为通过引用选择元素.

t.GetTime();
Run Code Online (Sandbox Code Playgroud)

摘录2

Time* t = new Time(12, 0, 0); 
Run Code Online (Sandbox Code Playgroud)

这里t是一个指针Time,所以你可以先取消引用指针,然后.像以前一样使用运算符:

(*t).GetTime();
Run Code Online (Sandbox Code Playgroud)

或者您使用的快捷方式,它通过指针运算符使用元素选择->:

t->GetTime();
Run Code Online (Sandbox Code Playgroud)

正如Armin正确指出的那样,您需要使用的元素访问形式取决于您通过其访问元素的变量类型.它不是由创建对象的方式决定的.例如:

Time t1 (12, 0, 0);
Time *t2 = &t1; 
t1.GetTime();
t2->GetTime();
(&t1)->GetTime();
(*t2).GetTime();
Run Code Online (Sandbox Code Playgroud)

  • +1.我会在你的答案中添加一个句子,明确表示创建对象的方式与元素访问无关(可能添加一个例如Time t; Time*pt =&t; pt-> GetTime(); (3认同)

Kos*_*tia 5

两者之间的区别在于第一个在堆栈上分配内存而第二个在堆上分配内存:

Time t (12, 0, 0); //t is an object on the stack
Time* t = new Time(12, 0, 0);//t is a pointer to an object on the heap
Run Code Online (Sandbox Code Playgroud)

请注意,使用第二种方式需要调用:

delete t;
Run Code Online (Sandbox Code Playgroud)

当你完成使用它.