本篇及下篇介绍面向对象
的内容,在C++中,面向对象是很重要的模块,可以说是撑起了C++的核心,新语法中也有适当的加强,但是本质没有变化。为了代码可读性更强或者更加方便,增加的小语法。
1.委托构造
C++ 11 引入了委托构造的概念,这使得构造函数可以在同一个类中一个构造函数调用另一个构造函数,从而达到简化代码的目的:
#include <iostream>
class Base {
public:
int value1;
int value2;
float value3;
//无参默认构造
Base()
{
value1 = 1;
}
//int参数构造
//在执行int参数构造函数时执行无参默认构造的写法
//只能执行或者说":"之后只能写一种构造函数
Base(int value) : Base()
{
// 委托 Base() 构造函数
value2 = 2;
}
};
int main() {
Base b(2);
std::cout << b.value1 << std::endl;
std::cout << b.value2 << std::endl;
}
运行结果:
2. 继承构造
在传统 C++ 中,构造函数如果需要继承是需要将参数一一传递的,这将导致效率低下。C++ 11 利用关键字 using 引入了继承构造函数的概念:子类直接调用父类的构造进行构造
class SubClass:public Base
{
public:
//直接使用父类的构造
using Base::Base;
private:
};
使用委托构造中的程序,进行补充
#include <iostream>
class Base {
public:
int value1;
int value2;
float value3;
//无参默认构造
Base()
{
value1 = 1;
}
//int参数构造
//在执行int参数构造函数时执行无参默认构造的写法
//只能执行或者说":"之后只能写一种构造函数
Base(int value) : Base()
{
// 委托 Base() 构造函数
value2 = 2;
}
};
class SubClass:public Base
{
public:
//直接使用父类的构造
using Base::Base;
//客户端如果是是对子类的写法也是对父类构造的值赋值,就可以直接利用父类的构造
//子类采用父类同样的构造方式对值进行构造
//SubClass(int v){
//value2=v;
//}
private:
};
int main() {
SubClass s(1);
Base b(2);
std::cout << s.value1 << std::endl;
std::cout << s.value2 << std::endl;
}
运行结果:
3.学习视频地址:委托构造和继承构造
4.学习笔记:委托构造和继承构造学习笔记