当前位置:首页 » 密码管理 » 类指针访问

类指针访问

发布时间: 2022-12-15 08:00:43

1. C++类指针在访问的时候何时用"->",何时候用"."

很高兴你能问这个问题,我想很多学程序设计不久的学生真不知道->的用法,我仔细说给你听吧:
简单来说,“->”的前面一定是一个“指向结构体的指针”或“对象指针”,后面是结构或对象的一个"成员" 。
如有:A->B,则可以肯定A是一个结构体指针或类的对象指针,而B是A中的一个成员。
以你的便子为例:
class A{...假设里面含有一个set()函数...}
A a,*p;
a是一个对象名,所以可以用a.set(),当然你还可以用(&a)->set( ),两者是等价的。
p如果指向一个结构体或对象,可以这样使用其中的成员:
p->set( )或者 p[0].set( ) 或者 (*p).set( )
当然如果p指向一个结构体数组或对象数组的话,则可以这样用:p->set( )表示对数组的第0个元素进行操作,等价于p[0]->set( )或*(p+0).set( ),如果想访问数组的第i个对象中的成员,则可以有这样几种方式,他们是等价的:
p[i],set( ) , *(p+i).set( ), (p+i)->set( ),
(&p[i])->set( )
可以看出符号"->"的左边必须是结构体或对象指针,而不能是普通变量。右边肯定是结构体或对象的成员。
特别说明的是:简单地认为“->”的左边是一个指针过于简单了。这个符号是用来代替*和.的合成,因为一般情况下通过“指针”访问结构体或对象成员,是“先求值,再取分量”,即上述的(*p).set( ),因为用两个符号过于麻烦,所以才使用“->”来代替,这样直观、简单得多。

2. void类型的指针访问内存,为什么错误 ps对于void类型指针了解非常少,希望能够给点简单的介


int *p;这一句定义了一个指针变量,但是没有指向任何值,不安全的指针。

p=100;这一句是错误的,指针不能显式的赋以地址。


void 指针可以网络。void相当与万能指针,可以指向任何类型的变量。

但是不是很建议用,例如 malloc()可以申请内存,且返回空指针,可以我们一般显式转换成int,之类。。。

3. C++类中,用指针访问对象成员问题

  1. test是栈对象,不需要显示的初始化,会默认调Tclass的构造函数。

  2. pt是堆对象,需要显示的初始化,不会自动调Tclass的构造函数。

  3. 正确的方式如下:

int main() {

Tclass test;

Tclass *pt = new Tclass();

pt->x = 100;

pt->y = 200;

pt->print();

test.x = 150;

test.y = 450;

test.print();

cout << "x+y=" << add(&test);

return 0;

}

4. C++类成员包含另一个类的指针对象,怎么对这个指针对象操作来访问它的成员

问题1:
A*p;

没有指向任何地址的指针,而你又用这个没指向任何地址的指针去修改值:p->data=1

问题2
指针访问数据都是用->来访问的。。如果你非要用.来访问,可以这样写:(*p[0]).data

正确的代码应该是这样的:

#include<iostream>
usingnamespacestd;
classA
{
public:
intdata;
};
classB
{
public:
A*p;
public:
B();
voidf();
};
B::B()
{
this->p=newA();
}
voidB::f()
{
this->p->data=1;
printf("%d ",this->p->data);
}

intmain(void)
{
Bb;
b.f();

return0;
}

5. 谈谈基类指针对类的成员函数的访问权限问题

基类指针
对其自己的成员函数:随便访问
对子类成员函数:不可访问(对于虚函数,都是子类的指针对子类重写的新的虚函数的引用,或者未重写时候,父类的虚函数的引用,父类即使用指针引了虚函数,也是引自己的)

6. 类的指针如何访问类的引用

声明:类名*对象指针名(point*ptr)
赋值:ptr=&p1(point p1)
访问:对象指针名->成员名(ptr->data)
(*对象指针名).成员名

不知道你是不是问的这个东西?

7. 在c++中,类的静态成员函数可以通过类的指针访问类的非静态数据成员吗

可以的,不过要间接访问。看下面的例子

#include<iostream>
usingstd::cout;
usingstd::endl;
classA{
intdata;
public:A(inti):data(i)
{
cout<<"new"<<endl;
};
A():data(0)
{
cout<<"newA"<<endl;
};
A(constA&a){
data=a.data;
cout<<"newA"<<endl;
};
~A()
{
cout<<"delete"<<endl;
};
staticvoidaccess(A*a)//静态成员,参数为对象指针
{
a->data++;
cout<<a->data<<endl;//通过指针访问内部非静态对象;但不能用this指针直接来访问
}
};

intmain()
{
Ab(2);
b.access(&b);//静态成员函数访问
return0;
}

8. 未初始化的类的指针可以访问类的成员

其实,在调用类的成员函数时,默认会将this的值传入第一个形参,这个参数主要是用来访问类的成员变量的。

如果在成员函数的实现中,没有引用任何成员变量(为对象分配的空间),使用空指针去调用都不会发生错误,因为在实现中你并未使用它。例如:

classB
{
public:
voidTest()
{
printf("运行时不会core掉 ");
}

voidTest2()
{
printf("运行下面的代码时会报错,因为引用成员变量时是基于0地址的 ");
a=100;
}

private:
inta;
};

intmain()
{
B*lpB=NULL;
lpB->Test();
lpB->Test2();

return0;
}

9. 为什么一个类的空指针可以访问类的成员函数

class MyClass{public:int i;void hello(){printf("hello/n");}void print(){printf("%d/n", i);}};void main(){MyClass* pmy = NULL;
pmy-hello();}看上面的这段代码,似乎很诡异。 用一个空指针调用成员函数,简直是天大的错误,可以遗憾的是,却是可行的,至少对于上面的这段程序来说,不会照成错误。
之前运行的原因。
大家知道,每个对象,都有一个指向自己的this指针,这个指针的值,将会因为对象的不同而不同,它的作用主要就是用来区分不同的对象,这样你就可以根据它
来访问不同的对象的成员变量。然而,我们main函数中的hello函数并没有使用类中的任何成员变量,所以,它也就不会用到this指针,此时的this指针是NULL。从而
我们就可以没有障碍的使用hello函数,然而相对的是,如果你在pmy-hello()之后接着调用pmy-print(),那么将会报空指针错误,因为这个函数试图用this指针访问成员变量i。

10. C++有关问题,基类的指针可以访问访问基类的虚函数吗

没说不可以访问吧,

编译报的错是“rror C2259: “A”: 不能实例化抽象类”

因为你的类A中有纯虚函数,所以A也就是抽象类的,抽象类是不能定义对象的,你那对象a(main函数中的第一行)是不允许定义的。

证明A*的指针可以访问A里的方法写个函数就可以了,如下的编译没问题。:

voidRunT(A*p)
{
p->Show();
}
热点内容
nginx搭建web服务器中文文件 发布:2025-07-24 06:06:07 浏览:51
汽车加装安卓屏如何下载软件 发布:2025-07-24 06:04:16 浏览:22
支付宝密码忘了怎么办 发布:2025-07-24 05:52:05 浏览:659
iis上传配置 发布:2025-07-24 05:46:24 浏览:994
android编译教程 发布:2025-07-24 05:32:24 浏览:673
菜鸟源码网站 发布:2025-07-24 05:30:20 浏览:490
数据库课程设计学生信息管理系统 发布:2025-07-24 05:29:29 浏览:691
算法和算法的描述 发布:2025-07-24 05:12:40 浏览:998
快速存储软件 发布:2025-07-24 05:06:55 浏览:831
我的世界网易版服务器停服 发布:2025-07-24 05:05:38 浏览:733