美文网首页
3.2C++基类和派生类的赋值

3.2C++基类和派生类的赋值

作者: tomchan | 来源:发表于2015-10-06 17:38 被阅读70次

请看下面一个完整的例子:

#include

using namespace std;

class A{

public:

int n;

A(int n):n(n){}

void display(){ cout<<"Class A: n="<<n<<endl;}

};

class B: public A{

public:

B(int n):A(n){}

void display(){ cout<<"Class B: n="<<n<<endl;}

};

class C: public A{

public:

C(int n):A(n){}

void display(){ cout<<"Class C: n="<<n<<endl;}

};

int main(){

A a(1);

B b(2);

C c(3);

a.display();

a = b;

b.n = 100;

a.display();

a = c;

a.display();

return 0;

}

运行结果:

Class A: n=1

Class A: n=2

Class A: n=3

本例中,将 b 对象赋值给 a 对象,等价于 a.n = b.n,赋值完成后 a.n 的值为 2,然后调用 a.display() 函数,输出结果就是”Class A: n=2“。将 c 对象赋值给 a 对象也是同样的道理。

这个例子很好的说明了:基类对象和派生类对象之间的赋值仅仅是对应的成员变量的赋值,不会影响成员函数,不会影响 this 指针。

指向对象的指针

对上例 main 函数中的代码做如下更改:

A *p = new A(1);

p->display();

p = new B(2);

p->n = 100;

p->display();

p = new C(3);

p->display();

输出结果:

Class A: n=1

Class A: n=100

Class A: n=3

本例定义了一个指针,使它指向不同的对象。与上例不同的是,本例中并没有发生对象的赋值,仅仅是改变了指针的指向。

将 p 指向 B 类的对象,隐式指针 this 也随之改变,指向 B 类的对象,所以 p->n 和 this->n 访问的都是 B 类对象的成员变量,输出结果显然是”n=100“。

细心读者可能已经发现,虽然 this 指向了 B 类对象,但是 p->display() 依然调用 A 类的成员函数。这是因为,成员变量和成员函数不在同一个内存区域,系统通过 this 指针来访问成员变量,但是却不通过它来访问成员函数。

如果希望通过 p 指针访问 B类的成员函数,可以将该成员函数声明为虚函数 ,详情看第四章。

相关文章

  • 3.2C++基类和派生类的赋值

    请看下面一个完整的例子: #include using namespace std;class A{public:...

  • 关于虚函数

    (1)派生类对象直接向基类赋值,赋值效果,基类数据成员和派生类中数据成员的值相同;(2)派生类对象可以初始化基类对...

  • C++ - public继承的赋值兼容规则

    public继承的赋值兼容规则 派生类的对象可以赋值给基类对象 派生类对象可以初始化基类引用 派生类对象的地址可以...

  • 3.0 C++远征:is a

    4-4is_a 0.派生类Soldier继承自基类Person 1.派生类可以给基类赋值: 2.基类指针可以指向派...

  • 【面向对象】基类和派生类运用

    1. 基本原则 (1)派生类对象可以向基类对象赋值。所谓赋值只是对数据成员赋值,对成员函数不存在赋值问题。赋值后基...

  • 孙世龙_9.18学习总结

    1.派生类继承了基类的除了构造函数、析构函数、拷贝构造函数和赋值运算符重载函数之外的所有成员,因此派生类对象由两部...

  • C++ - 派生类的构造函数

    派生类的构造函数 派生类对象包含基类 对象 执行派生类构造函数之前,先执行基类的构造函数 派生类交代基类初始化,具...

  • day 5(python notes)

    note1:继承通过派生类和基类实现。基类称为父类,派生类称为子类。继承语法如下:class SubClassNa...

  • 实现继承

    1. 继承 1.1 继承和派生的关系 基类和派生类的关系就是,派生类从基类派生而来。 1.2 派生语法 1.3 访...

  • <C++程序设计>访问权限,虚函数,继承

    派生类访问权限 派生类对象的体积 = 基类对象的体积 +派生类对象自己的成员变量的体积 ,派生类对象包含着基类对象...

网友评论

      本文标题:3.2C++基类和派生类的赋值

      本文链接:https://www.haomeiwen.com/subject/pimgcttx.html