//子类在重写虚函数时,会覆盖父类的函数
#include <iostream>
using namespace std;
class B
{
public:B(){cout<<"Create B!"<<endl;}
public:virtual void fun(){cout<<"B::fun()"<<endl;}virtual void show(){cout<<"B::show()"<<endl;}void print(){cout<<"B::print()"<<endl;}
};class D : public B
{
public:D(){cout<<"Create D!"<<endl;}
public:void fun(){cout<<"D::fun()"<<endl;}void show(){cout<<"D::show()"<<endl;...
构造和析构函数不允许调用纯虚函数,可以先调用虚函数,里面再调用纯虚函数实现。class Base{public: virtual void foo()=0; Base() { call_foo();} void call_foo() { foo(); }}; class Derived: Base{ void foo() { }}; int main() { Derived d;} 在父类中定义纯虚函数,实现工厂生产。子类再实现。可以用虚函数里面调用纯虚函数实现。父类实现了线程,子类实现方法即可示例: ?1234567891011121314151617181920...
一、父类与子类父类与子类的相互转换1、派生类的对象可以赋给基类,反之不行2、基类的指针可以指向派生类,反之不行3、基类的引用可以初始化为派生类的对象,反之不行4、派生类指针必须强制转换为基类指针后才可以指向基类5、基类指针转换为派生类指针容易导致崩溃性错误6、虚基类的引用或派生不能转换为派生类 class father{ //};class son : public father{ //};int main()
{father f;son s;f = s;//正确s = f;//错误fathe...
1java中:2import java.util.Scanner;3publicclass ClassTest{4publicstaticvoid main(String args[]){5 child ch=new child(2);6 parent p=ch;7 p.print();8//p.print2();//调用错误,父类中没有改成员方法,该方法只属于子类! 9 }
10}
1112class parent{
13int xx;
14 parent(int x){
15 xx=x;
16 }
17void print(){
18 System.out.println("this is parent!");
19 }
20int f(){
21int ...
讲解目录: 1.各类在内存中的表现形式 备注: 主要复习开发知识,和反汇编没有关系,但是是理解反汇编的前提. 2.子类继承父类 2.1 子类中有虚函数,父类中有虚函数 : 都有的情况下 2.2 子类中没有虚函数,父类中有虚函数 : 子类没有,父类有的情况 2.1 2.2的情况都是一样的. 2.3 子类中有虚函数,父类中没有虚函数 : 子有父没有的的情况下 2.4 子类父类都没有虚函数...
C++ 子类重写父类函数,子类调用重写函数,执行父类的函数还是子类的函数?
.
.
.
当然是子类
也就是自己有就执行自己的,自己没有就执行父类的
代码:
#if 1
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;class A
{
public:A() {};void func(){cout << "hello" << endl;}
};class a : public A
{
public:a() {};void func(){cout << "world" << endl;}
};int main(int argc, char *argv[])
{A AA;AA...
1 #include <iostream>2 #include <string>3 #include <cstring>4 #include <memory>5 #include <map>6 #include <hash_map>7 #include <conio.h>8 9 template <typename T> class c1;
10 template <typename T> class c2;
11
12 template <typename T>
13 class c1 {
14 public:
15 void operator[](size_t i) {
16 std::cout << "c1" << std::endl;
17 }
18 };
19
20 template <typename T>
21 class c2 : pu...
多态是用父类指针指向子类对象 和 父类步长++ 是两个不同的概念
1、铁律1:指针也只一种数据类型,C++类对象的指针p++/--,仍然可用。
2、指针运算是按照指针所指的类型进行的。
p++ <==> p=p+1 //p = (unsigned int)basep + sizeof(*p) 步长。
3、结论:父类p++与子类p++步长不同;不要混搭,不要用父类指针++方式操作数组。class Parent
{
public:Parent(int a = 0){this->a = a;}virtual void prient(){cout << "Parent:"<< ...
#include "iostream"
using namespace std;
class base{ //定义一个简单的父类
public:
void print(){ //简单的打印函数
cout << "base print" << endl;
}
};
class child:public base {
public:
void print(){ //重写父类print函数
cout << "child print" << endl;
}
void print(int a){ //重载print函数
cout << "child print a=" << a << endl;
}
};
void main()
{
child c1;
c1.print();
c1.print(3);
//其实是可以...
转载自啦啦啦蓝精灵在C++中 虚函数是一个很重要的运用不部分,一般来实现多态。 关于虚函数,子类,父类指针之间的关系。 我找到了一种比较简单易懂的解释方式。 (摘录自其他博客) 1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩) 2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合语法习惯,在程序设...
//oop.h
class A{
public:virtual void l(){fun();}void fun();
public:int a;
};
class B:public A{virtual void l(){fun1();}void fun1(){std::cout<<"B"<<std::endl;}public:int m;
};void A::fun() {std::cout<<"a"<<std::endl;
}可以看出A为基类B为子类
//main.cpp
void main{
A* p=new B;//很正常的父类指针指向子类。
}父类的指针指向子类B的对象,所以不能访问B对象中不是从A继承下来的成员。比如
p->m//不行的
p->a//可行...