您的位置:首页 > 编程语言 > C语言/C++

c++ 复杂类型指针 类指针 浅谈

2015-07-26 08:56 239 查看
晚上学习C++虚函数,在类指针指向问题上,卡壳了,其它的先不说,先看一段代码:

#include <iostream>
class Class1{
public:
    Class1(){
        a=1;
    }
    void print(){

        std::cout <<"Class1->print()\n";
    }
public:
    int a;
};
class Class2:public
Class1{
public:
    Class2(){
        a=2;
    }
    void print(){
        std::cout <<"Class2->print()\n";
    }
public:
    int a;
};
在这两个类中,Class2类公有继承了Class1类,并对父类中的成员函数和变量进行了覆盖。下面,进行两个语句。

    Class1 *c;
    Class2 d;  
    c=(Class1 *)&d;/
然后通过父类指针调用print()函数,即 c->print();  结果发现在这里调用的是父类中Class1中的print() 函数,甚是郁闷,搞不懂,为什么,思考片刻,终于想通。先看下面一条语句,Class1 *c; c->print();  程序不报错,并且可以顺利执行。但当我们执行c->a;这句话时,就会有问题。翻阅资料后,发现,

1. 类不占用内存,也不存在什么内存空间,只有在声明对象才开始有内存空间,声明指针依然不会有什么内存空间,
2. 函数不占用类对象的内存,即使不存在类对象,依然可以调用,只是不能访问成员变量。

至于之前出现的问题,调用c->print();这句话时,调用的是Class1中的函数,可知,指针调用普通成员函数,只与指针自身类型有关,而与其所指向的对象无关,如果想通过父类指针指向子类对象,来调用子类中被覆盖的方法,则需要把成员函数定义成虚函数;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: