面向对象程序设计-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 << "A::A()" << std::endl;
12     }
13     ~A()
14     {
15         std::cout << "~A::A()" << std::endl;
16     }
17     void print()
18     {
19         std::cout << "A::print()" << i << std::endl;
20     }
21
22     void print(int i)
23     {
24         std::cout << i << std::endl;
25         print();
26     }
27
28     void set(int ii)
29     {
30         i = ii;
31     }
32 };
33
34 class B :public A
35 {
36 public:
37     B() :A(15)
38     {
39         std::cout << "B::B()" << std::endl;
40     }
41     ~B()
42     {
43         std::cout << "B::~B()" << std::endl;
44     }
45     void print()
46     {
47         std::cout << "B::print()" << std::endl;
48     }
49     void f()
50     {
51         set(20);
52         print();
53     }
54 };
55
56 void main()
57 {
58     B b;
59     b.set(10);
60     b.print();
61     b.f();
62     b.A::print(200);
63
64     system("pause");
65 }

派生类与基类都定义有构造函数时,则编译器先调用基类的构造函数,如有对象成员则执行对象成员的构造函数,最后是派生类的构造函数。析构函数与构造函数完全相反的顺序。

时间: 2024-10-18 11:58:55

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

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

赋值兼容规则是指在公有派生情况下,一个派生类的对象可以作为基类的对象来使用的情况. 约定类derived是从类base公有派生而来的,则指如下3种情况: (1)派生的对象可以赋给基类的对象.例如: derived d; base b; b=d; (2)派生类的对象可以初始化基类的引用.例如: derived d; base& br=d; (3)派生类的对象的地址可以赋给指向基类的指针.例如: derived d; base *pb=&d; 把子类的对象交给父类的指针或引用就成了向上造型.

面向对象程序设计-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++_课时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++_课时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

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

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