我可以想象这个问题已经被问到了,但实际上我找不到任何合适的解决方案,所以请原谅这是一个多余的问题.
我有一个自定义类
class myClass_A
{
public:
myClass_A(); // Constructor
myFunction_A(); // Some function from Class A
};
Run Code Online (Sandbox Code Playgroud)
现在我有另一个自定义类,它有一个类型的成员 myClass_A
class myClass_B
{
public:
myFunction_B(); // Some function from Class B
private:
myClass_A m_instance; // Instance of Class A
}
Run Code Online (Sandbox Code Playgroud)
现在myFunction_B()想myFunction_A()从m_instance这样的方式调用方法:
myClass_B::myFunction_B()
{
m_instance.myFunction_A();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我编译我的代码(基本上就像我上面发布的示例),它将成功,没有任何警告或错误.所以我的问题是:
A.在这个例子中是否会调用构造函数?
B.我真的可以从未初始化的对象中调用方法吗?
C.假设没有调用构造函数但我仍然可以从该对象调用方法 - >这意味着我的类的成员仍未初始化?
对不起,如果这些问题有点愚蠢,但我觉得我现在的速度很慢.
我想知道为什么类的常量数据成员需要在构造函数中初始化,为什么不在其他地方?这样做有什么影响而不是这样做?
我还看到,只有静态常量积分数据才能在类中初始化,而不能在类中初始化非数据成员.
例如: - 假设下面是我的班级声明
class A{
int a; // This we can initialize at the constructor or we can set this member by calling "vSet" member function
const int b;
static const int c = 10; //This works fine
public:
A();
~A();
void vSet(int a);
int iAdd();
void vDisplay();
};
Run Code Online (Sandbox Code Playgroud)
构造函数定义如下: -
编辑部分:由于之前的构造函数定义示例错误
A::A():a(1),b(9){}
Run Code Online (Sandbox Code Playgroud)
如果我错了,请纠正我.提前致谢.
对于下面的C++函数:
cross(vector<int> &L_, vector<bool> &backref_, vector< vector<int> > &res_) :
L(L_), c(L.size(), 0), res(res_), backref(backref_) {
run(0);
}
Run Code Online (Sandbox Code Playgroud)
冒号(":")告诉左右两部分之间的关系是什么?可能,这段代码可以说什么呢?
可能重复:
构造函数中这个奇怪的冒号成员语法是什么?
我在Qt应用程序的构造函数中到处都看到它,但我不知道它叫什么.我正在努力寻找有关它的文档.
Browser::Browser(QTextBrowser& textBrowser, QObject* parent /*= 0*/)
: // <- What
m_textBrowser(textBrowser), // <- is
QObject(parent) // <- this stuff?
{
}
Run Code Online (Sandbox Code Playgroud)
我为我的新闻道歉.
几个月前,我读到了一种技术,如果传入的参数与局部变量匹配,那么你可以使用一些简短的语法来设置它们.为了避免这种情况
public string Method(p1, p2, p3)
{
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
继承人我的错误......
"在构造函数'NumGame :: NumGame(int&)'中:错误:没有用于调用'Category :: Category()'的匹配函数"
我在这里看了几个类似的问题,但似乎无法找到答案.我有一个基类类别,NumGame继承自它但不会编译.
class Category {
public:
void virtual selection(int&);
Category(int&);
virtual ~Category(){};
private:
int myRandNum;
};
Category::Category(int& a){
myRandNum = a;
}
void Category::selection(int& a){
cout << "I am NumGame version number... " << a << endl;
cout << "Now Im playing... " << myRandNum << endl;
}
class NumGame : public Category {
public:
void selection(int&);
NumGame(int&);
~NumGame(){};
private:
int myRandNum;
};
NumGame::NumGame(int& b){
myRandNum = b;
}
void NumGame::selection(int& b) {
}
Run Code Online (Sandbox Code Playgroud) 我是一名Java程序员,目前正在阅读GoF关于设计模式的书籍,其中的例子以C++和Smalltalk语法给出.我在C++中遇到了一个特定的语法,我发现它被称为成员初始化列表.从给出的答案来看,使用成员初始化列表似乎比使用成员变量的赋值更好(更有效).在Java中有类似的东西吗?如果没有,那么Java设计师应该有一个很好的理由不包含这个功能.你对此有何看法?
我是C++的新手,并且发现了以下代码片段,用于从std :: exception扩展的自定义异常.我不理解的唯一部分是: err_msg(msg) {}构造函数定义之后.任何人都可以解释为什么这不是在函数括号中?
class my_exception : public std::exception {
private:
std::string err_msg;
public:
my_exception(const char *msg) : err_msg(msg) {};
~my_exception() throw() {};
const char *what() const throw() { return this->err_msg.c_str(); };
};
Run Code Online (Sandbox Code Playgroud) 我是C++的新手,最近开始研究面向目标的编程.我想编写自己的线性代数模块来处理三维向量和3x3矩阵.我试图将矩阵定义为由三个向量组成的类.
class vector {
public:
double n1, n2, n3;
vector (double a, double b, double c) {
n1 = a; n2 = b; n3 = c;
}
};
class matrix {
public:
vector m1, m2, m3;
matrix (vector a, vector b, vector c) {
m1 = a; m2 = b; m3 = c;
}
};
Run Code Online (Sandbox Code Playgroud)
但是,我收到编译错误:
In constructor `matrix::matrix(vector, vector, vector)':
no matching function for call to `vector::vector()'
Run Code Online (Sandbox Code Playgroud)
我猜这个程序不知道如何使用我定义的向量类构造矩阵.但是我不明白为什么.如果有人能解释,我将非常感激.
经过一些谷歌搜索后,我无法找到这个问题的答案.我如何初始化它,为什么我需要?
#include "CalculatorController.h"
CalculatorController::CalculatorController(SimpleCalculator& aModel, ICalculatorView& aView)
{\\(this is the bracket informing me of the error)
fModel = aModel;
fView = aView;
}
Run Code Online (Sandbox Code Playgroud)
标题:
#pragma once
#include "ICalculatorView.h"
#include "SimpleCalculator.h"
class CalculatorController
{
private:
SimpleCalculator& fModel;
ICalculatorView& fView;
public:
CalculatorController(SimpleCalculator& aModel, ICalculatorView& aView);
void run();
~CalculatorController();
};
Run Code Online (Sandbox Code Playgroud)