-
在最底层的类,要实例化对象,就必须执行继承量当中的每一个类<br> 在销毁的时候,逆序执行 无论继承有多少级,只要保持间接或者直接的关系,子类都可与自己的直接父类,或者是间接父类,称之为is a 的关系,并且能够通过父类的指针对直接子类或者是间接子类的对象进行操作查看全部
-
多重继承:例如有三个类,C类继承了B类,B类继承了A类,那么这三个类之间就存在多重继承关系 多继承:一个派生类有多个基类 多继承和多重继承 多重继承:线性继承两次及其以上为多重继承。例如: class Person:{}; class solider:public Person{}; class test:public solider{}; test 即为多重继承。 多继承:一次继承连个类成为多继承。例如: class test:public Person,public Solider{}; 此时test 为多继承。查看全部
-
定义两个类,基类是人类,定义数据成员姓名(name),及成员函数void attack()。 士兵类从人类派生,定义与人类同名的数据成员姓名(name)和成员函数void attack()。 通过对同名数据成员及成员函数的访问理解成员隐藏的概念及访问数据的方法。查看全部
-
void test1(Person p){p.play}调用test1的时候,因为在test1中所定义的参数是一个对象P,所以传值的时候会先实例化临时对象P,通过临时对象P调用play这个函数,在test1执行完毕之后,p这个临时对象就会被销毁 如果函数的参数是基类的对象,那么基类的对象和派生类的对象,都可以作为实参传递进去,并且可以正常使用。 void test2(Person &p) 没有实例化临时对象,使用基类的引用也可以接收基类的对象以及派生类的对象 void test3(Person *p)的调用结果和void test2(Person &p)一样 因为不产生临时变量,所以void test3(Person *p)、void test2(Person &p)效率更高查看全部
-
对象赋值、指针指向的时候,如果用父类去接受或者是指针指向的方式,无论是用soldier初始化p 这个对象,还是soldier 直接赋值给p 这个对象,soldier子类中的数据成员的数据都能够赋值给它的父类当中的对象对应的那个数据成员 p只能调用自己的数据成员和成员函数,不能调用子类的数据成员和成员函数 通过父类的指针指向子类的对象,销毁的时候执行的是父类的析构函数,子类的内存没有释放,为了防止内存的泄漏,此时需要用virtual关键字修饰修购函数,virtual可以被继承查看全部
-
派生类的对象可以赋值给基类,可以用基类的指针指向派生类的对象,也就是派生类的对象可以去地址给基类<br> (派生类可以给基类赋值,基类指针可以指向派生类)<br> 由上可以引出这种情况:把基类的指针或者是基类的对象或者是基类的引用作为函数的参数来使它可以接收所传入的子类的对象,并且也可以传入基类的对象<br> 无论怎样,父类只能接收和访问子类中自己有的数据成员和成员函数查看全部
-
同名函数,其参数的不同,同样还是隐藏,即为当函数名相同时,隐藏与函数的参数的个数无关 当数据成员同名的时候,子类的数据成员直接只用只能使用自身的,不能使用继承下来同名的数据成员。如果想使用,就需要加上父类的类名冒号冒号父类数据成员,打印的时候也必须使用父类类名::父类数据成员的方式,才能将其打印出来查看全部
-
遇到一个小问题,在使用#include<string>时,需要配套使用using namespace std;才可正常使用string,否则会出错,也就是string类型应该是在std命名空间。以前一直仅把他当作#include<iostream>使用cout时的命名空间,现在想来应该是同名的命名空间。public Soldier : public Person<br> {<br> }<br> 注意只有一个':',不是两个. 使用string类型必须包含<string> 声明类的最后要加分号. undefined reference问题:一般是少了目标文件 g++ 编译时要加入所有相关的.o文件 include包含头文件时注意双引号“”和尖括号<>是不同的,编译器会搜索不同的路径 (1)尖括号<>是引用C++自身文件库里的头文件,如<iostream> (2)双引号“”则是引用用户自己编写的头文件,如“Person.h”查看全部
-
A类有void ABC(),B类也有void ABC(),B类公有继承A类,基类中的ABC()成员函数就会被B类中的ABC()成员函数隐藏,隐藏的特性体现在:当实例化B的对象的时候,使用该对象只能够直接的访问到子类B中的ABC()成员函数,而无法访问父类中的ABC()成员函数 从语法的角度来说,同名的数据成员也具有隐藏的特征<br> 父子关系,成员同名,隐藏 对象调用同名的成员函数:直接soldier.play();调用的是自己的成员函数,如果要调用父类的成员函数,则需要加上父类的类名,soldier.Person::play()查看全部
-
私有继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。 保护继承时基类中各成员属性均变为protected,并且基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象不能访问基类中的任何的成员。查看全部
-
B类从A类派生,那么B类是A类的子类,A类是B类的超类。 B类中含有A类的所有数据成员。 只是 private 成员不可访问 B类从A类公共派生,那么可以通过B类的对象调用到A类的公共及保护限定符下的成员函数 可以在B类中直接使用A的公共及保护限定符的数据成员。 A类的公共成员函数成为B类的公共成员函数。 A类的保护成员函数成为B类的保护成员函数。 A类的私有成员函数不能被B类继承并使用。 B类从A类私有派生,那么A类的公共成员函数成为B类的私有成员函数。 B类从A类保护派生,那么A类的公共成员函数成为B类的保护成员函数。 A类的保护成员函数成为B类的保护成员函数。查看全部
-
B类从A类公共派生,那么A类的私有成员函数不能被B类继承并使用。 B类从A类私有派生,那么A类的公共成员函数成为B类的私有成员函数。查看全部
-
public继承:子类的public继承父类的public 子类的protected继承父类的protected 公有继承时基类中各成员属性保持不变,基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员 protected继承:父类的public和protected均被继承至子类的protected之中 子类只能够访问自己的public成员与函数 private继承:父类的...................均被继承至子类的private之中 如果该子类再继续派生 则其派生类不能正常访问其数据成员与成员函数 因为它的内容都是私有继承来的查看全部
-
在菱形继承结构中,中间类的初始化列表中按规定要包含对基类的初始化,虽然编译系统不会由此调用虚基类的构造函数。在最底层的类的初始化列表中不仅要调用其直接基类的构造函数,还要调用虚基类的构造函数。查看全部
-
C++隐藏查看全部
举报
0/150
提交
取消