面向对象程序设计-C++_课时22向上造型

赋值兼容规则是指在公有派生情况下,一个派生类的对象可以作为基类的对象来使用的情况。

约定类derived是从类base公有派生而来的,则指如下3种情况:

(1)派生的对象可以赋给基类的对象。例如:

derived d;

base b;

b=d;

(2)派生类的对象可以初始化基类的引用。例如:

derived d;

base& br=d;

(3)派生类的对象的地址可以赋给指向基类的指针。例如:

derived d;

base *pb=&d;

把子类的对象交给父类的指针或引用就成了向上造型。

父类:人

子类:学生

可以把学生当人看,但是不能把人当学生看

时间: 2024-10-13 16:40:33

面向对象程序设计-C++_课时22向上造型的相关文章

面向对象程序设计-C++_课时30运算符重载——基本规则_课时31运算符重载——原型_课时32运算符重载——赋值_课时33运算符重载——类型转换

区分初始化,赋值 1 #include <iostream> 2 using namespace std; 3 4 class Fi 5 { 6 public: 7 Fi() {}//1构造函数 8 }; 9 10 class Fee 11 { 12 public: 13 Fee(int) {}//2构造函数 14 Fee(const Fi&) {}//3构造函数 15 }; 16 17 void main() 18 { 19 Fee fee = 1;//2构造函数 20 Fi fi;

面向对象程序设计-C++_课时16子类父类关系

初始化列表 类名::类名(形参1,形参2,...形参n):数据成员1(形参1),数据成员2(形参2),...,数据成员n(形参n) { ... } 规则1,初始化列表进行数据成员的初始化 规则2,初始化列表进行父类的初始化 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 private: 7 int i; 8 public: 9 A(int ii) :i(ii)//初始化列表 10 { 11 std::cout &l

面向对象程序设计-C++_课时24多态的实现

所有带virtual的类的对象,里面最上面有一个隐藏的指针vptr,指向一张表vtable 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 A() :i(10) {} 8 virtual void f() { std::cout << "A::f()" << std::endl; } 9 int i; 10 }; 11 12 void main() 13

面向对象程序设计-C++_课时26拷贝构造Ⅰ_课时27拷贝构造Ⅱ

复制构造函数,不是字节对字节的拷贝,而是成员对成员的拷贝 构造函数,参数是引用一个类 正确 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 static int objectCount = 0; 6 7 class HowMany 8 { 9 public: 10 HowMany() { objectCount++; print("HowMany()"); }//构造函数,

面向对象程序设计-C++_课时19const_课时20不可修改的

error C2131: 表达式的计算结果不是常数 1 #include <iostream> 2 using namespace std; 3 4 void main() 5 { 6 const int class_size = 12; 7 int finalGrade[class_size]; 8 9 int a = 12; 10 int arr[a];//error C2131: 表达式的计算结果不是常数 11 12 int x; 13 std::cin >> x; 14 c

面向对象程序设计-C++_课时21引用

数据类型 & 别名=对象名; 1 #include <iostream> 2 using namespace std; 3 4 int * f(int * x) 5 { 6 (*x)++; 7 return x; 8 } 9 10 int & g(int & x) 11 { 12 x++; 13 return x; 14 } 15 16 int x; 17 18 int & h() 19 { 20 int q;//!return q 21 return x; 2

面向对象程序设计-C++_课时13初始化列表

尽量在Initialization初始化,不要在assignment构造函数赋值 1 Student::Student(string s) :name(s) 2 { 3 4 }

面向对象程序设计-C++_课时18内联函数

使用inline说明的函数称内联函数. 在C++中,除具有循环语句.switch语句的函数不能说明为内联函数外,其他函数都可以说明为内联函数. 1 #include <iostream> 2 using namespace std; 3 4 inline int f(int i) 5 { 6 return i * 2; 7 } 8 9 void main() 10 { 11 int a(4); 12 int b = f(a); 13 14 std::cout << a <&l

面向对象程序设计-C++_课时17函数重载和默认参数

函数重载,区别一是参数类型不同,二是参数个数不同. 默认参数可以多于1个,但必须放在参数序列的后部. 尽量不要用默认参数,会影响阅读 error C2668: “f”: 对重载函数的调用不明确 1 #include <iostream> 2 using namespace std; 3 4 void f(int i, int j = 0)//默认参数 5 { 6 std::cout << i << " " << j << st