一、父类与子类父类与子类的相互转换1、派生类的对象可以赋给基类,反之不行2、基类的指针可以指向派生类,反之不行3、基类的引用可以初始化为派生类的对象,反之不行4、派生类指针必须强制转换为基类指针后才可以指向基类5、基类指针转换为派生类指针容易导致崩溃性错误6、虚基类的引用或派生不能转换为派生类 class father{ //};class son : public father{ //};int main()
{father f;son s;f = s;//正确s = f;//错误fathe...
一、函数的重写什么叫函数的重写呢?在子类中和在父类中定义的函数类型是一样的就叫做函数的重写,注意这里的函数重写和函数重载的区别。问题的引入:那么如果发生了函数的重写那该怎么办,编译器是如何解析的呢?要想解决这个问题,那么我们首先得搞清楚到底什么是函数重写,下面举例说明:1.在子类中定义与父类中原型相同的函数2.函数重写只发生在父类与子类之间#include <iostream>using namespace std;
class Parent
{public:v...
本篇随笔为转载,原文地址: C++多继承中重写不同基类中相同原型的虚函数。在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数。下面就是一个例子:class CBaseA{public: virtual void TestA();};class CBaseB{public: virtual void TestB();};class CDerived : public CBaseA, public CBaseB{public: virtual void TestA(); // 重写基类CBaseA中的虚函数TestA() virtual void TestB(); // 重写基类CBaseB中的...
01、继承:/*回顾上节的内容:1.继承1.1 吸收 父类成员1.2 调整 父类成员(访问权限 公有 私有 受保护/隐藏)1.3增加子类的新成员 实现更多功能2.多继承 -->继承所有父类所有成员菱形继承 -->虚继承 virtual今晚 补充 复习 回顾:继承 吸收成员 --> 对象大小1.类中成员变量-->对象大小只和成员变量有关成员函数-->包含一个this指针 指向当前对象成员 变量和函数并不在一起static -->全局father类的对象 -->int如果调用成员函数...
1.继承的三种方式:公有继承(public),私有继承(private),保护继承(protected)三种继承方式的说明,如下表所示:特征公有继承保护继承私有继承公有成员变成派生类的公有成员派生类的保护成员派生类的私有成员保护成员变成派生类的保护成员派生类的保护成员派生类的私有成员私有成员变成只能通过基类接口访问只能通过基类接口访问只能通过基类接口访问能否隐式向上转换是是否 ...
1.类的继承中的同名问题 1.1正常继承中的同名问题 基本上C++同名问题都是就近原则 如果想访问父类成员,用类名限定即可。2.虚继承(菱形继承) A ---->int a;B C B、C继承自A,D多继承于B、C ----->B:a C:a //B,C要虚继承A D ------>D: a aclass A {
public:A(int a) :a(a) {}int a;
};class B :vir...
(一)public继承意味着“is-a”关系。它的意思是:如果B以public形式继承自A,那么B类型对象肯定是一个A对象,反之不成立。A是B的一种抽象,B是A的特例。任何使用A的地方,都能使用B。(二)public继承意味着“is a”(是一种)关系:(1)任何一个继承类对象也是一个基类对象;(2)任何可以出现基类对象的地方也可以出现一个继承类对象(例如函数的实参);(3)任何一个可以在基类对象上所做的操作,同样也可以在派生类上操作(...
一、三种继承方式继承方式不同,第一个不同是的是派生类继承基类后,各成员属性发生变化。第二个不同是派生类的对象能访问基类中哪些成员发生变化。表格中红色标注。 1 #include <iostream>2usingnamespace std;3 4class A5{6private:7int i;8protected:9int j;
10public:
11int k;
12};
1314class B:public A
15{
1617};
1819int main()
20{
21 B b;
22 b.k=1;
23 }1、只有当B,public继承A的时候,才能b.k=1。因为只有当p...
保护继承protected:保护继承保护继承:当保护继承时,基类的公有和保护成员变成派生类的保护成员,私有成员不可直接访问! 1 #include <iostream>2 3usingnamespace std;4 5class info {6public:7void setter(int a,int b){8 num = a;9 age = b;
10 }
1112int getter(void) {
13int a = age;
14return a;
15 }
1617void pri(void) {
18 cout << num << endl;
19 cout << age << endl;
20 ...
#include <iostream>
#include <string>using namespace std;namespace Animals {class Dog {private:string name;public:Dog(string name) : name(name) {}Dog() : name(NULL) {}virtual void bark() {cout << "Baseclass: Hi, " << name << endl;}string getName() {return name;}void setV(string aname) {name = aname;}};class SDog : public Dog {public:SDog(string name) : Dog(name){}virtual void bark() {Dog::bark();c...
转自:http://blog.csdn.net/jiangyi711/article/details/4890889#(二 )成员变量前面介绍完了类布局,接下来考虑不同的继承方式下,访问成员变量的开销究竟如何没有继承:没有任何继承关系时,访问成员变量和C语言的情况完全一样:从指向对象的指针,考虑一定的偏移量即可单继承:由于派生类实例与其基类实例之间的偏移量为0,所以直接利用基类指针和基类成员之间的偏移量关系D* pd;
pd->c1; // *(pd + dDC + dCc1); // *(pd + d...
首先看一段代码:class B
{
public :
int b;
};
class D: virtual public B
{
public :
int d;
};int _tmain(int argc, _TCHAR* argv[])
{
cout<<sizeof(D)<<endl;
}; 在vs输出12,当将virtual关键字去掉之后,输出8;可见虚拟继承需要额外的空间开销。在vs中,引入了所谓的“虚基类表”(类似虚函数表),同时每个Class Object中有一个指向虚基类表的指针,虚基类表中存放着对应虚基类对象的指针(地址)。那么两个虚基类的情况...
#include <iostream>
#include <string>using namespace std;class Pet {protected:string name;public:void setname(string aname) {this->name = aname;}virtual string bark() {return name + ", Hello";}
};class Dog : public Pet {public:virtual string bark() {string tmp = Pet::bark();return tmp + ", dog";}
};int main() {Dog d;d.setname("doga");cout << d.bark() << endl;return 0;
}原文:http://blog.csdn.net/m...
不同作用域声明的标识符的可见性原则:如果存在两个或者多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层依然可见;如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种现象称为隐藏规则。在类的派生层次结构中,基类的成员和派生类新增的成员都具有类作用域。二者的作用范围不同,是相互包含的两个层,派生类在内层。这时,...
众所周知,C++面向对象的三大特性为:封装,继承和多态。下面我们就先对封装做一些简单的了解。封装是通过C++中的类来完成的,类是一种将抽象转换为用户定义类型的工具。类的定义如下:class circle
{public: //成员变量int m_L;int m_H;public: //成员函数(方法)double get_Square(){return m_L*m_H;}
}
在上面的代码中,我们定义了一个 "circle" 类,主要包含三个部分:成员变量,成员方法和访问控制(public, protect, priv...