1.在一般情况下,指向一种类型对象的指针不允许指向另一种类型的对象,然而指向基类对象的指针可以指向该基类的共有派生类对象(反过来不成立),这是运行时,多态的基础。指向基类队象的指针指向派生类对象后,可以访问派生类中有基类继承下来的成员,但不能访问那些派生类对象自己增加的成员。2.一个含有虚函数的类称为多态类。3.虚函数就是在一个类中用virtual定义的成员函数。基类的虚函数在派生类中仍是虚函数,并且一般在派生...
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=100;int b=a;而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include <iostream>using namespace std;class CA{ public: CA(int b) { a=b; } void Show () { cout<<a<<endl; } private: int a;};int main(){ CA A(100); CA B=A; B.Show (); return 0;}运行程序,...
C++成员变量、构造函数的初始化顺序 一、C++成员变量初始化1、普通的变量:一般不考虑啥效率的情况下 可以在构造函数中进行赋值。考虑一下效率的可以再构造函数的初始化列表中进行2、static 静态变量(本地化数据和代码范围):static变量属于类所有,而不属于类的对象,因此不管类被实例化了多少个对象,该变量都只有一个。在这种性质上理解,有点类似于全局变量的唯一性。函数体内static变量的作用范围时该函数体,不同于auto变量,...
例子
example 1
注:若一个基类同时派生出两个派生类,即两个派生类从同一个基类继承,那么系统将为每一个简历副本,每个派生类独立地使用自己的基类副本(比如基类中有属于自己类的静态变量等)。
#include <iostream.h>
class Person
{
public:
person() {cout<<"Construction of person."<<endl;}
~person() {cout<<"Destruction of person."<<endl;}
};
class Student:public person
{
public:
student() {cout<<"...
map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key;该学生的成绩用int类型,作为value。这样一来,我们可以根据学生姓名快速的查找到他的成绩。 但是,我们除了希望能够查询某个学生的成绩,或许还想看看...
6.1函数基础 一个典型的函数定义包括以下几个部分:返回类型(return type)、函数名字、由0个或多个形参组成的参数列表以及函数体。其中,形参以逗号隔开,形参的列表位于一对圆括号之内。函数执行的操作在语句块中说明,该语句块称为函数体。 我们通过调用运算符(call operator)来执行函数。调用运算符的形式是一对圆括号,它作用于一个表达式,该表达式是函数或者是指向函数的指针;圆括号之内是一个用逗号隔开的实...
这篇文章主要讲解如何在C++中使用cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等。通过本文,您可以完全脱离scanf/printf,仅使用cout来完成一切需要的格式化输入输出功能(从非性能的角度而言)。更进一步而言,您还可以在<sstream>、<fstream>上使用这些格式化操作,从而代替sprintf和fprintf函数。为方便描述,下文仅以cout为例进行介绍。 一、综述 cout是STL库提供的一个iostream实...
刚刚看了一篇有关函数重载的文章,在文章的结尾作者抛出了一个问题,模板函数的普通函数构成的重载调用时是如何分配的????对于白痴一枚的我嫩是半天都木有思绪,关于函数的重载机制,是一个比较复杂的问题,结合下面简单的例子简略的说说函数重载机制例:#include <iostream>using namespace std; const int& max( const int& a, const int& b ){cout << "non-template max() is called" << endl;return a < b ? b : a;}//temp...
摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试、笔试的时候复习。目录:sizeof的用法:sizeof和strlen的区别:sizeof的用法:sizeof 是一种单目操作符,而不是函数。sizeof以字节形式给出操作数的存储空间。操作数可以是一个表达式或在括号内的类型名。操作数的存储空间由操作数的类型决定。<SPAN style=‘font-family: "courier new", courier; f...
#include<iostream>
usingnamespace std;
class Person {
public:void show() const {m_B = 200;//成员属性声明时加关键字mutable,在常函数内可以修改 //m_A = 100;报错,常函数内不允许修改成员属性 }int m_A;mutable int m_B;
};
void test01() {const Person p;//p.m_A = 100;报错,常对象不允许修改成员属性p.m_B = 100;//成员属性声明时加关键字mutable,常对象在定义后可以修改 p.show();
}
int main() {test01(); sy...
环境: win7_x64旗舰版、VS2015企业版场景: C++标准库提供std::function类来将一个对象的调用操作封装在一个对象内部,然后可以委托调用,但是有一些弊端,例如下面的需求: 我们需要将调用操作封装存储到一个map中,来实现观察者模式或信号槽,由于std::function是在编译期确定类型,导致你无法将不同类型的std::function(例如std::function<void()>和std::function<void(int)>)放入同一个map中。 function_de...
C++ 虚函数表解析<?xml:namespace prefix = o /> 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这样的技术能够让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比方:模板技术,RTTI技术,虚函数技术,要么是试图做到在编...
继承类的范围,构造函数和拷贝控制当用派生类执行函数的时候,首先会在当前的类里面找
如果找不到就一级一级地往上找。Name Lookup Happens at Compile Timeclass Quote
{
public:Quote()=default;Quote(const string &book, double sales_price):bookNo(book), price(sales_price){cout<<"Quote gouzhao function"<<endl;}string isbn() const {return bookNo;}//返回指定数量的项目总销售价格//派生类将重写应用不同的折扣算法vir...
一、指定格式输出1.在C中,按指定进制格式输出如下:printf("%05o\n",35); //按八进制格式输出,保留5位高位补零
printf("%03d\n",35); //按十进制格式输出,保留3位高位补零
printf("%05x\n",35); //按十六进制格式输出,保留5位高位补零
/*
00043
035
00035
*/2.在C++中,按指定进制格式输出如下:#include <bitset>
#include<iostream>
usingnamespace std;
int main()
{cout << "35的8进制:" << std::oct << 35<< end...
基本概念虚函数是在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};C++中用它来实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。虚函数实现机制虚函数是如何做到因对象的不同而调用其相应的函数的呢?现在我们就来剖析虚函数。我们先定义两个类class A{//虚函数示例代码
public:
virtual voidfun(){cout<<1<<endl...