java的基础上学习c++笔记

命名空间

using namespace std 告诉编译器使用 std 命名空间。命名空间是 C++ 中一个相对新的概念。
命名空间std:新式头文件都放到了此空间了(旧的没有)

三个重要的符号

->

A->B A为指针,->是成员提取,A->B是提取A中的成员B

::

表示作用域,和所属关系。

::是运算符中等级最高的,它分为三种:

1)global scope(全局作用域符),用法(::name)

int a=3;
class A{ int a=4; cout<< ::a;}

2)class scope(类作用域符),用法(class::name)

“比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数
实际操作中,我们一般会在私有区域定义数据,在公有区域定义相关的函数,以便在类的外部也可以调用这些函数,否则需要将函数生命为public。

3)namespace scope(命名空间作用域符),用法(namespace::name)

class Test{
public:
    Test();
     static void print() 
    {
        std::cout<<"Test"<<endl; //命名空间时使用::
   }
private:
     int a;
};
Test::Test() : a(1)   //定义时使用::
{}
Test::get();  //使用静态成员函数时用::

:

继承符号
// 派生类
class Rectangle: public Shape, public PaintCost

// 基类
class Animal {
    // eat() 函数
    // sleep() 函数
};


//派生类
class Dog : public Animal {
    // bark() 函数
};

一个派生类继承了所有的基类方法,但下列情况除外:基类的构造函数、析构函数和拷贝构造函数。基类的重载运算符。基类的友元函数。

友元friend

friend complex& __doapl (complex *, const complex&);

关键字virtual

支持多继承
虚拟继承格式
C++使用虚拟继承(Virtual+Inheritance),使得派生类如果继承基类多次,但只有一份基类的拷贝在派生类对象中。

class D{......};
class B: public D{......};
class A: public D{......};
class C: public B, public A{.....};

这个继承会使D创建两个对象,要解决上面问题就要用虚拟继承格式
格式:class 类名: virtual 继承方式 父类名

class D{......};
class B: virtual public D{......};
class A: virtual public D{......};
class C: public B, public A{.....};

关键字virtual主要主要是实现动态绑定
C++中, 虚函数可以为private(默认情况下,类的所有成员都是私有的。), 并且可以被子类覆盖(因为虚函数表的传递),但子类不能调用父类的private虚函数。虚函数的重载性和它声明的权限无关。

一个成员函数被定义为private属性,标志着其只能被当前类的其他成员函数(或友元函数)所访问。而virtual修饰符则强调父类的成员函数可以在子类中被重写,因为重写之时并没有与父类发生任何的调用关系,故而重写是被允许的。

编译器不检查虚函数的各类属性。被virtual修饰的成员函数,不论他们是private、protect或是public的,都会被统一的放置到虚函数表中。对父类进行派生时,子类会继承到拥有相同偏移地址的虚函数表(相同偏移地址指,各虚函数相对于VPTR指针的偏移),则子类就会被允许对这些虚函数进行重载。且重载时可以给重载函数定义新的属性,例如public,其只标志着该重载函数在该子类中的访问属性为public,和父类的private属性没有任何关系!

纯虚函数可以设计成私有的,不过这样不允许在本类之外的非友元函数中直接调用它,子类中只有覆盖这种纯虚函数的义务,却没有调用它的权利。
在c++中,重写(override)方法有一点别扭,因为必须使用关键子virtual。只有在超类中声明为virtual的方法才能被子类正确地重写。virtual关键字出现在方法声明的开头。

一旦将方法或析构函数标记为virtual,它们在所有子类中就一直是virtual,即使在子类中删除了virtual关键字也同样如此,并且可以被Sub的子类重写,因为在Super类中将其标记为virtual。

运算符重载

operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数
java能重载运算符吗?不能

//编写的过程和重载函数一样
inline complex&
complex::operator += (const complex& r)
{
  return __doapl (this, r);
}

接口

C++ 接口是使用抽象类来实现的,
如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 “= 0” 来指定的,如下所示:

public:
      // 纯虚函数
      virtual double getVolume() = 0;

异常处理

C++的异常处理和java差不多

参考:
https://www.runoob.com/cplusplus/cpp-tutorial.html
https://wws.lanzous.com/ir59Rls554d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值