C++ 不懂的地方 记录01

  1. C++ 中初始化列表, 的详细使用?
  2. 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化 这句话不是很理解
//手机类
class Phone
{
public:Phone(string pName){cout << "Phone的构造函数调用" << endl;m_PhoneName = pName;}Phone(const Phone &p) {   //拷贝构造函数    m_PhoneName = p.m_PhoneName;}~Phone(){cout << "Phone的析构函数调用" << endl;}string m_PhoneName; //手机名称
};void test02() {Phone *p1 = new Phone("vivo");   // 这里的内存分配情况??????????
}

以上疑惑在(C++ 有参构造 无参构造 拷贝构造 以及参数化列表 成员对象之间的执行关系)进行了解答。

  1. C++ 静态成员对象与非静态成员对象 内存分配 以及 声明定义的区别?
    静态成员对象是存储在内存中的全局数据区吗?
    静态成员变量在类中声明 类外初始化,
    那么而 非静态成员变量如果创建对象的话,在类内是不是仅仅只是声明.?
class Printer {
private:static int count = 0;    // 为什么这样不可以?
};class Printer {
private:int count = 0; //这样就可以?
};
  1. 教程说:
    子类不会继承 父类中的构造和析构函数,只有父类自己才知道如果构造和析构自己的属性
    那么疑问:子类会继承 赋值函数吗?
#include <string>
#include <iostream>
using namespace std;
class Base {
public:char* m_name;int m_age;Base() {cout << "Base no pattern create" << endl;const char* nametemp = "def";this->m_name = new char[strlen(nametemp) + 1];strcpy(this->m_name, nametemp);this->m_age = 18;}Base(const char *name, int age) {cout << "Base use pattern create" << endl;this->m_name = new char[strlen(name) + 1];strcpy(this->m_name, name);this->m_age = age;}Base(const Base & b) {cout << "Base copy create" << endl;this->m_name = new char[strlen(b.m_name) + 1];strcpy(this->m_name, b.m_name);this->m_age = b.m_age;}Base& operator=(const Base & b) {cout << "Base = fun" << endl;this->m_name = new char[strlen(b.m_name) + 1];strcpy(this->m_name, b.m_name);this->m_age = b.m_age;return *this;}~Base() {cout << "Base delete" << endl;if (this->m_name != NULL) {delete[] this->m_name;this->m_name = NULL;}}
};class Son : public Base {
public:int m_id;};
void test1() {/*Son s;cout << s.m_age << endl;*/Son s; // 这样会调用父类的无参构造Son s1(s);  // 这样会调用父类的拷贝构造//Son s("Tom", 2); // 这样报错, 因为子类根本不会继承父类的构造函数
}
void test2() {}
int main()
{//test1();return 0;
}
Son s; // 这样会调用父类的无参构造
Son s1(s);  // 这样会调用父类的拷贝构造
虽然说没有继承,但是还是调用了 父类的方法

在C++中,构造函数不会自动继承,只是如果子类没有写构造函数,那么系统会这个类自动添加一个默认构造函数,是一个空函数体,所以什么也没有做,接着就会调用父类的构造函数,所以你觉得是继承了父类的构造函数。 子类和父类的构造函数的调用顺序:

class B:public A
B b1;

那么构造函数的调用顺序是:A(),B()

如果不想调用基类的构造函数,那么就应该在子类中写一个构造函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简答面向数据报,面向字节流

先来一个例子 用UDP传输100个字节的数据: 面向数据报 如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节; 而不能循环调用10次recvfrom, 每次接收10个字节; 面向字节流 由于缓冲区的存在, TCP程序的读和写不需要一一匹配…

TCP三次挥手四次握手(面试总结)

1、 为什么建立连接协议是三次握手&#xff0c;而关闭连接却是四次握手呢&#xff1f; 全双工通信。 这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后&#xff0c;它可以把ACK和SYN&#xff08;ACK起应答作用&#xff0c;而SYN起同步作用&#xff09;放在一个…

C++ 有参构造 无参构造 拷贝构造 以及参数化列表 成员对象之间的执行关系

#include <iostream> #include <string> using namespace std; class Phone { public:string m_pname;/*Phone() {cout << "无参构造" << endl;m_pname "vivo";}*/Phone(const Phone &p) {cout << "拷贝构造"…

C++ this指针初步使用,与链式编程

#include "pch.h" #include <iostream> #include <string> using namespace std;class Person { public:int m_age;Person(int age) {this->m_age age;}Person & addAge(Person &p) { // 返回对象的引用this->m_age p.m_age;return *…

linux的makefile -I(大写i)-L(大写l)-l(小写l)

gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld 上面这句表示在编译hello.c时&#xff1a; -I /home/hello/include 表示将/home/hello/include目录作为第一个寻找头文件的目录&#xff0c;寻找的顺序是&#xff1a;/home/hello/include–>/us…

csdn怎么快速转载别人的文章

如何转载 用谷歌浏览器加载文章地址&#xff0c;打开文章F12打开Developer Tools&#xff0c;并打开Elements页面 将文章开头部分的文字作为关键字在Elements界面搜索 以此文为例&#xff1a;http://blog.csdn.net/aggressive_snail/article/details/54375876 搜索找了好久关…

C++ 常函数 常对象 初步

1.常函数 如果不想让成员函数修改成员对象&#xff0c; 就将成员函数改为常函数&#xff0c; 成员函数的后面 加 const。 注意&#xff1a;必须在成员函数的声明和定义处同时加上 const 关键字 2. 常对象 比如 const Person p; 这个p就是一个常对象&#xff0c; 常对象只能调用…

解释性语言和汇编性语言对比

解释性语言和编译型语言的区别和不同解释性语言编译型语言概念计算机不能直接的理解高级语言&#xff0c;只能直接理解机器语言&#xff0c;所以必须要把高级语言翻译成机器语言&#xff0c;计算机才能执行高级语言的编写的程序。翻译的方式有两种&#xff0c;一个是编译&#…

C++ 拷贝构造函数与赋值构造函数调用时机初步01

#include <iostream> #include <string> using namespace std; class Person { public:char *m_name;int m_age;int m_id;Person() {cout << "默认构造函数" << endl;const char * name "default";m_name new char[strlen(name)…

同步通信和异步通信

首先是两者的不同 同步通信要求接收端时钟频率和发送端时钟频率一致&#xff0c;发送端发送连续的比特流&#xff1b;异步通信时不要求接收端时钟和发送端时钟同步&#xff0c;发送端发送完一个字节后&#xff0c;可经过任意长的时间间隔再发送下一个字节。同步通信效率高&…

C++ 多继承 初步01

class Base1 { public:Base1(){this->m_A 10;}int m_A; };class Base2 { public:Base2(){this->m_A 20;}int m_A; }; //多继承语法 class Son : public Base1, public Base2 { public:int m_C;int m_D; }; void test01() {cout << sizeof (Son) << endl;S…

多态面试题集锦

多态面试题集锦 什么是多态 答&#xff1a;多态是面向对象的重要特性之一&#xff0c;它是一种行为的封装&#xff0c;是同一种事物所表现出的多种形态&#xff0c;简单地说是”一个接口多种实现“ 多态的作用 答&#xff1a;多态技术允许将父类设置成和他的一个或更多的子对象…

C++ 菱形继承 的 对象模型01

先看 普通菱形继承 #include <iostream> #include <string> using namespace std; class Animal {int a_age; }; class Sheep : public Animal {}; class Tuo : public Animal {}; class SheepTuo : public Sheep, public Tuo {}; void test1() {cout << …

伙伴算法

通常情况下&#xff0c;一个高级操作系统必须要给进程提供基本的、能够在任意时刻申请和释放任意大小内存的功能&#xff0c;就像malloc 函数那样&#xff0c;然而&#xff0c;实现malloc 函数并不简单&#xff0c;由于进程申请内存的大小是任意的&#xff0c;如果操作系统对ma…

C++ 菱形虚继承 通过指针来寻找继承过来的成员变量

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;//动物类 class Animal { public:int m_Age; //年龄 };//virtual加上后 继承方式 数据虚继承 // Animal类 变为 虚基类 //羊类 class Sheep : virtual public Animal {};//驼 class Tuo : virt…

CRC冗余校验举例和原理

什么是CRC校验&#xff1f;CRC即循环冗余校验码&#xff1a;是数据通信领域中最常用的一种查错校验码&#xff0c;其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查&#xff08;CRC&#xff09;是一种数据传输检错功能&#xff0c;对数据进行多项式计算&#xff0c…

100篇打点!

原创终于到100了&#xff0c;写一篇博客打点。在记录一个很严重的问题&#xff0c;昨天面试&#xff0c;程序的思路都有了&#xff0c;可是在线OJ半天无法将多个字符串输入并保存&#xff0c;遍历。现在记录一下方法&#xff01; #include <stdio.h> #include <stdli…